集合结构体系

news2024/12/26 11:04:11

集合体系结构

  • collection单链集合:是单列集合的祖宗接口,他的功能是所有单列集合可以继承使用的

  • 创建collection对象

    Collection<String> coll=new ArrayList<>();//学习阶段才创建的collection中的arraylist
    
    方法名称说明
    boolean add()集合中添加指定元素
    void clear()清空集合中所有元素
    boolean remove()删除集合中给定的对象
    contains()判定对象集合中是否有给定的对象
    isEmpty()判断当前集合是否为空
    int size()返回集合中的元素个数
    • list集合,添加元素是有索引的,可重复,有序
    • set集合,添加元素无索引,不重复,无序的
  • map双链集合

collection集合:

  • collection的遍历方式

    • 创建迭代器对象:

      coll.iterator()
      
    • 迭代器遍历

      • 迭代器不依赖索引

      • 迭代器在Java中的类是iterator,迭代器是集合专用的遍历方式

      • 注意事项:

        • 报错NoSuchElementException:没有元素异常
        • 迭代器遍历完指针不会复位
        • 循环中只能用一次net方法
        • 迭代器遍历时,不能用集合的方法进行增加或者删除
      • 迭代器在中常用的方法:

      方法名称方法说明
      hasNext();判断当前位置是否有元素,有为true无为false
      next();获取当前迭代器指针的元素,向下移动指针
    • 增强for遍历

      • 底层就是迭代器,为了简化迭代器的书写而形成的
      • 使用范围:单列集合,数组
      • 细节:修改增强for遍历的变量,不会改变集合中原本的数据
    • lambda遍历

      • 更简单的更直接的遍历集合的方法
      方法名称说明
      default void forEach(Consumer<? super T> action):结合lambda遍历集合

list集合:

  • 添加元素是有序的可重复的有索引的

    • 添加元素,添加到指定位置,原来索引上的元素往后面移动
    • 删除元素remove。删除指定元素的索引且返回删除的元素,在删除元素优先删除类型一致的
    • 修改元素,修改指定索引地方的元素,且返回被修改的元素
    • 获取指定索引的元素,get(i)
  • list 遍历方式

    • 迭代器遍历
    • 列表迭代器遍历
    • 增强for循环遍历
    • lambda遍历

遍历方式的对比:

  • 迭代器:在遍历过程中需要删除元素
  • 列表迭代器:在遍历过程中,需要添加元素
  • 增强for:仅仅遍历
  • lambda:仅仅遍历
  • 普通for:遍历操作索引,可以用普通for遍历

实现类的学习:

arraylist
linkedlist
vector

Arrayslist集合:

  • 底层原理:
    • 是一个数组结构,数组:elementData,和一个指针size,size包括数组的长度,和下次存入元素的位置构成。
    • 利用空参创建的集合,在底层创建一个长度为0的数组
    • 在添加元素时,在添加元素时会创建一个长度为10的数组(elementData),其数组元素的初始化值为null
    • 长度为10的数组被存满之后,会自动扩容为原来的1.5倍
    • 如果一次添加的元素特别多1.5倍放不下,数组的长度以实际为准

linkedlist集合:

  • 底层原理:底层时双链表结构的,查询慢,删除快,如果操作的是首位元素也是很快的

-

  • linklist有很多直接操作首位元素的特有api
特有方法说明
addFirst()该列表开头添加指定元素
addLast()添加元素到此列表的末尾
getFirst()返回列表第一个元素
getLast()返回列表最后一个元素
removeFirst()列表删除并返回第一个元素
removeLast()列表删除并返回最后一个元素

总结

在以后,如何避免并发修改异常,在使用迭代器,或者增强for遍历的过程中,不要使用集合的方法来添加或者删除元素

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/982365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 之预制体(Prefab)的解释以及用法

文章目录 详细解释代码举例 详细解释 Unity中的预制体&#xff08;Prefab&#xff09;是一种重要的资源类型&#xff0c;用于创建和管理游戏对象&#xff08;GameObject&#xff09;。预制体是一种可重用的模板&#xff0c;可以在游戏场景中多次实例化&#xff0c;使开发人员能…

【STM32学习】——SPI通信协议SPI时序W25Q64存储芯片软件SPI读写

目录 前言 一、SPI通信协议 1.概述​ 2.硬件电路 3.移位示意图 二、SPI时序 1.时序基本单元 2.完整时序波形 三、W25Q64存储芯片 1.芯片简介 2.硬件电路&引脚定义 3.芯片框图 4.Flash操作注意事项 四、软件SPI读写W25Q64 五、SPI通信外设 总结 前言 声明&…

城市公共交通概念新解

“城市&#xff0c;让生活更美好”&#xff0c;城市是公众多元需求最为集中体现之所在&#xff0c;亦是获得满足之场所。同时&#xff0c;它也是科技创新、文化融合、经济发展的基座与舞台。城市交通作为城市运行的重要系统&#xff0c;相当于城市有机体的血脉和经络&#xff0…

命令行git联网失败,但是实际可以联网

最近下载代码的时候发现总是告诉我连不上github的网页&#xff0c;但是我自己通过浏览器又可以上网&#xff0c;找了半天发现这个方法可以。 记录下这个代理 打开git bash 执行以下命令&#xff1a; git config --global http.proxy http://127.0.0.1:7890 git config --glob…

【运维日常】infinibang网络架构,容器间跨机器不同网段通信

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

【JavaScript】在指定dom元素前面创建标签元素

一、基础操作过程 要在指定的DOM元素前面创建标签元素&#xff0c;有以下步骤&#xff1a; 获取指定的DOM元素&#xff1a;使用document.querySelector()或document.getElementById()等方法来获取指定的DOM元素。 const targetElement document.querySelector(#targetElement…

基于HBuilder X平台下的 驾校报名考试管理系统 uniapp 微信小程序3n9o5

本课题研究的是基于HBuilder X系统平台下的驾校管理系统&#xff0c;开发这款驾校管理系统主要是为了帮助学员可以不用约束时间与地点进行查看教练信息、考场信息等内容。本文详细讲述了驾校管理系统的界面设计及使用&#xff0c;主要包括界面的实现、控件的使用、界面的布局和…

Qt应用开发(基础篇)——复选按钮 QCheckBox 单选按钮 QRadioButton

一、前言 QCheckBox类与QRadioButton类继承于QAbstractButton&#xff0c;QCheckBox是一个带有文本标签的复选框&#xff0c;QRadioButton是一个带有文本标签的单选按钮。 按钮基类 QAbstractButton QCheckBox QCheckBox复选框是一个很常用的控件&#xff0c;拥有开关(选中和未…

微信小程序开发前准备

文章目录 一、注册微信小程序开发账号&#xff08;一&#xff09;访问微信公众号平台官网&#xff08;二&#xff09;进入注册页面 二、获取微信小程序AppID三、安装微信开发者工具四、创建微信小程序项目 在正式开发微信小程序前&#xff0c;需要先进行开发前的准备工作&#…

rhcsa学习3 文件

文件系统权限 有三种权限类别可应用&#xff1a;读取、写入和执行 查看文件和目录的权限及所有权 ls -l 显示有关权限和所有权的详细信息 长列表的第一个字符表示文件类型 - 表示常规文件、d 目录、l 软链接、其它字符代表硬件设备&#xff08;b和c&#xff09;或其他具有特殊用…

内推与面试:内部推荐如何影响面试结果

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

HHDBCS表管理简介

HHDBCS支持新增、打开、删除、级联删除、清空、级联清空、重命名、属性查看等操作。 1 新增 右键树形结构的表节点&#xff0c;在弹出菜单中选择“新增”&#xff0c;会弹出创建表的表单&#xff0c;可以输入表名称&#xff0c;注释&#xff0c;点击添加列&#xff0c;输入列…

mysql基础面试题

创建表 列名以及列的类型前后顺序 三种等号 <>&#xff0c;&#xff0c;: mysql中0是不是null slq语句的执行顺序 别名的两种方法 关键字用途 order by group by desc/asc having___条件筛选 几个重要的集合函数 sum.aVG.min.max.count SQL 什么语言 什么是结构化 数据表…

深入解析Spring Boot中最常用注解的使用方式(上篇)

摘要&#xff1a;本文将详细介绍Spring Boot中最常用的注解的使用方式&#xff0c;并通过代码示例加以说明。通过学习这些注解&#xff0c;读者将能够更好地理解和运用Spring Boot框架&#xff0c;构建高效的企业级应用。 目录 第一部分&#xff1a;常见的控制器注解1.RequestM…

电子心率检测仪语音报警芯片,DAC输出语音ic,WT588F02B-8S

随着医疗科技的不断发展&#xff0c;电子医疗设备已经成为提高健康管理和医疗效率的重要工具。在这个领域&#xff0c;深圳唯创知音推出了全新的WT588F02B-8S DAC输出语音IC&#xff0c;为电子心率检测仪等产品提供卓越的语音报警功能。这一创新的产品将为医疗行业和健康监测市…

Multisim14.0仿真(八)LM555制作流水灯

一、仿真原理图&#xff1a; 二、仿真运行效果&#xff1a;

cesium创建基本的实体、点、线、多边形(vue)

1.通过viewer实例的entities对象实现 实现代码&#xff1a; <template><div id"container"></div> </template><script> import * as Cesium from cesium/Cesium import "cesium/Widgets/widgets.css" export default {mo…

Termux配置bashrc,终端长路径改为短路径

Termux配置bashrc termux的bashrc在$HOME/../usr/etc目录下 先使用cd命令进入用户主目录 然后cd ../usr/etc&#xff0c;ls可以发现&#xff0c;存在一个名为bash.bashrc的文件 使用vim或者其它编辑器打开 大概在第15行 PS1\[\e[0;32m\]\w\[\e[0m\] \[\e[0;97m\]\$\[\e[0…

帆软报表执行sql报SQL command not properly ended

如果你在执行预览SQL时报如下图的错误&#xff1a; 你需要检查一下几点&#xff1a; 1.是否在SQL在有逗号忘记加了 2.是否有括号少了 3.是否在SQL的最后有分号存在&#xff0c;如果有需要去掉&#xff0c;这点是比较坑的&#xff0c;因为SQL最后加分号在oracle数据库中是能够…

Android MQTT:实现设备信息上报与远程控制

Android MQTT&#xff1a;实现设备信息上报与远程控制 1. 介绍 1.1 MQTT是什么&#xff1f; MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息传输协议&#xff0c;最初由IBM开发&#xff0c;用于连接远程设备与服务器之间的通信。它在物…