集合框架 - Collection单列集合

ops/2024/10/18 19:22:43/

01 集合体系的介绍

【1】什么是集合:集合就是存放数据的容器,Java根据不同的业务场景提供给了我们很多具有不同特点的集合。

【2】集合的分类:① 以Collection为例的单列集合 ② 以Map为列的双列集合。

【3】单列集合的特点:每个元素只会存储一个数据。

【4】双列集合的特点:每个元素会存储两个数据(键值对)。

02 Collection单列集合

02_01 Collection体系

【1】Collection是一个泛型接口,这个接口只规定了一些基本的特点,增删查改。

【2】Collection有很多的子接口,其中List和Set这两个是我们着重要学的。

【3】List系列集合的特点:有序,可重复,有索引。(有序是指输入和输出的顺序是一致的)

         ArrayList和LinkedList实现类的特点:同上。

【4】Set系列集合的特点:无序,不重复,无索引。

         HashSet:同上。

         LinkedHashSet:有序,不重复,无索引。

         TreeSet:按照元素大小默认升序排序,不重复,无索引。

02_02 Collection常用方法

【说明】:对于toArray()方法,如果非要用类似Stirng[]的变量接返回值,则书写格式为:

                  String[] a = list.toArray(new String[list.size()]);

                  提示:Object[]和String[]等类似的写法是不具备父子关系的。

02_03 Collection遍历方式

02_03_01 迭代器遍历

【1】介绍:迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator

【2】遍历步骤:使用集合对象调用iterator方法,得到一个Iterator对象,然后使用Iterator对象调用hasNext,next方法配合遍历。

【3】说明:迭代器对象一旦拿到它会指向集合中第一个元素,hasNext方法用于判断当前位时是否有元素存在,next方法用于返回迭代器对象当前所指向的元素,并更新指向位置指向下一个。

【4】使用迭代器遍历时只能判断一次获取一次,否则会出bug。

【5】迭代器越界会出现:NoSuchElementException。

02_03_02 增强for

【1】介绍:增强for循环可以遍历集合,也可以遍历数组,本质其实也是使用迭代器进行遍历。

02_03_03 lambda表达式

【1】介绍:lambda是JDK8开始新增的一个语法,Java通过通过结合lambda表达式提供了一种更简单,直观的方式来遍历集合。

【2】遍历步骤:使用集合对象调用forEach方法,forEach方法的参数是一个Consumer函数式接口对象 ... 具体见下图:

02_03_04 补充:集合中存储的是元素的什么信息

答:集合中存储的是元素的地址信息。

02_04 List系列集合

02_04_01 特点,特有方法

02_04_02 遍历方式

02_04_03 ArrayList集合的底层原理和应用场景

【1】特点:

    ① 基于数组实现。

    ② 根据索引的查询速度快。 

    ③ 删除添加数据效率低。

【2】ArrayList集合的应用场景:

   ① 适合:经常需要根据索引查询数据;数据量少

   ② 不适合:数据量大且经常进行增删操作。

02_04_04 LinkedList集合的底层原理和应用场景

【1】链表:链表是由一个个节点组成的,每个节点里分为数值域和指针域。

【2】链表的特点:每次根据索引查询时都要从头遍历,所以查询效率低;

                               由于增删操作并不涉及到数据的大范围移动所以相对数组增删数据的效率较快。

【3】LinkedList底层是双向链表,根据索引的查询速度要比单链表的快,因为在查询之前可以根据索引大小判断从哪一头开始查找更快;

                                                       增删数据的效率相对数组来说也是相对较快的,

                                                       对于首尾元素增删查改的效率非常高

【应用场景】:

02_05 Set系列集合

02_05_01 特点

02_05_02 HashSet集合的底层原理

【说明】:扩容时会进行二倍扩容。

【说明】:哈希表中的红黑树大小是根据哈希值的大小排的。

02_05_03 LinkedHashSet集合的底层原理

02_05_04 TreeSet集合

【说明】:

     ① 我们在TreeSet集合中放的是自定义类型的对象,在使用比较器比较时,如果比较的结果相等则会直接认为是重复元素。

     ② 当我们既实现了Comparable接口,又实现了CompareTo接口,会选择CompareTo中的比较规则进行排序。

02_06 应用场景总结

02_07 集合的并发修改异常问题

02_08 可变参数

02_09 Collections工具类

【注意】:Collections工具类的shuffle,sort方法只能传List系列的集合!!!


http://www.ppmy.cn/ops/118199.html

相关文章

【Linux基础IO】深入解析Linux基础IO缓冲区机制:提升文件操作效率的关键

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:Linux “ 登神长阶 ” 🤡往期回顾🤡:暂无 🌹🌹期待您的关注 🌹🌹 ❀Linux基础IO 📒1. 什么是缓…

【前端】ES7:ES7新特性

文章目录 1 求幂运算符2 数组的includes方法 1 求幂运算符 Math.pow(3, 2) 3 ** 2 // trueconsole.log(3 ** 3) // 272 数组的includes方法 如果仅仅查找数据是否在数组中,建议使用includes,如果是查找数据的索引位置,建议使用indexOf更好…

Vue3.3新特性defineModel

defineModel的使用: defineModel选项可以帮我们省去很多麻烦 不仅需要上述操作,还需要进行一定的配置: 在vite.config.js中进行配置 defineModel是一个宏,所以不需要从vue中import导入,直接使用就可以了。这个宏可以用来声明一个…

24/9/24 算法笔记 超参数优化算法

在机器学习中,优化超参数的算法是至关重要的,因为它们可以帮助我们找到最佳的模型配置,从而提高模型的性能。以下是一些常用的超参数优化算法: 网格搜索(Grid Search):这是一种穷举搜索的方法&a…

计算机毕业设计 招生宣传管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

友元运算符重载函数

目录 1.定义友元运算符重载函数的语法形式 2.双目运算符重载 3.单目运算符重载 1.定义友元运算符重载函数的语法形式 (1)在类的内部,定义友元运算符重载函数的格式如下: friend 函数类型 operator 运算符(形参表&a…

mqtt网关数据接入rabbitmq,缓存离线数据,实现消息保留

应用场景:网关将设备数据发布至mqtt服务器后,数采程序因为重启或者升级等原因,未能接到到离线的订阅消息,利用rabbitmq-mqtt可将离线数据缓存,待上线后接收 启用mqtt插件 rabbitmq-plugins enable rabbitmq_mqtt

【韩顺平Java笔记】第2章:Java概述

按视频的标号来对应小标题,自用学习笔记 文章目录 5. 内容梳理6. 程序举例6.1 什么是程序 7. Java故事7.1 Java诞生小故事7.2 Java技术体系平台 8. Java特性8.1 Java重要特点 9. sublime10. jdk介绍10.1 Java运行机制及运行过程10.1.1 Java虚拟机(JVM&a…