list|集合总结(Collection,List,Set,Map)(补充集合结构图的关系)
集合
- 集合体系结构图
-
- Collection集合
-
- 概述
- 常用方法
- 遍历(迭代器)及代码演示
- List集合
-
- 概述(特点)
- 方法
- 概述
- 遍历(三种遍历方式——迭代器,普通for,增强for)
- List子集的特点和功能
- Set集合
-
- 1.特点
- 哈希值
- ①HashSet
- ②LinkedHashSet集合
- ③TreeSet集合
- Map集合
-
- **概述:**
- 特点:
- 常用方法
- 获取方法
- 遍历的两种方式:
- 总结
- 补充
-
- 集合框架底层数据结构总结
文章图片
集合体系结构图
文章图片
Collection集合 概述
1.单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
2.JDK 不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现
常用方法
文章图片
遍历(迭代器)及代码演示
文章图片
文章图片
代码演示:
文章图片
List集合 概述(特点)
- 有序集合
允许出现重复的元素
集合特点:①存储顺序一致 ②存储的元素可以重复 ③有索引
文章图片
概述
遍历(三种遍历方式——迭代器,普通for,增强for)
文章图片
List子集的特点和功能
①ArrayList集合——底层是数组结构实现,查询快、增删慢
②LinkedList集合——底层是链表结构实现,查询慢、增删快
LinkedList集合的特有功能
文章图片
Set集合 1.特点
- 元素存取无序
- 没有索引,只能通过迭代器或者增强FOR来遍历
- 不能存储重复元素
- 概念:JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
- 获取方法:Object类中的public int hashCode():返回对象的哈希码值
- 哈希值的特点:
- 1.同一个对象多次调用hashCode()方法返回的哈希值是相同
- 2.默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
代码演示:
文章图片
哈希表:
文章图片
集合特点:
- 1.底层是哈希表结构
- 2.元素存储无序
- 3.没有索引
- 4.不能存储重复元素
文章图片
HashSet学生遍历(重点:重写hashCode()和equals()方法,用增强FOR遍历)
文章图片
文章图片
②LinkedHashSet集合
特点
- 哈希表和链表实现的Set接口,具有可预测的迭代次序
- 存储有序
- 没有重复元素
文章图片
③TreeSet集合
特点
- 元素存储有序
- 没有索引
- 不能存储重复元素
文章图片
文章图片
2.比较器排序Comparator的使用(代码演示)
文章图片
文章图片
Map集合 概述:
interface Map
代码演示:
文章图片
特点:
- 1.键值对映射关系
2.一个键对应一个值
3.键不能重复,值可以重复
4.元素存取无序
文章图片
获取方法
文章图片
遍历的两种方式:
①键去获取值(代码演示)
文章图片
②键值去获取键和值(代码演示)
文章图片
总结 在学习集合中,需要注意单列集合(Collection)和双列(Map)集合的区别(区分它们的遍历方式,分清它们的特点以及代码的具体运用
补充
文章图片
如图所示:图中,实线边框的是实现类,折线边框的是抽象类,而点线边框的是接口
1、List(有序、可重复)
List里存放的对象是有序的,同时也是可以重复的,List关注的是索引,拥有一系列和索引相关的方法,查询速度快。因为往list集合里插入或删除数据时,会伴随着后面数据的移动,所有插入删除数据速度慢。
2、Set(无序、不能重复)
Set里存放的对象是无序,不能重复的,集合中的对象不按特定的方式排序,只是简单地把对象加入集合中。
3、Map(键值对、键唯一、值不唯一)
Map集合中存储的是键值对,键不能重复,值可以重复。根据键得到值,对map集合遍历时先得到键的set集合,对set集合进行遍历,得到相应的值。
对比如下:
文章图片
集合框架底层数据结构总结 Collection
1.List
- Arraylist: Object数组
- Vector: Object数组
- LinkedList: 双向循环链表
- HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素
- LinkedHashSet: LinkedHashSet 继承与 HashSet,并且其内部是通过 LinkedHashMap
来实现的。有点类似于我们之前说的LinkedHashMap 其内部是基于 Hashmap 实现一样,不过还是有一点点区别的。 - TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树
- HashMap:
JDK1.8之前HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突).JDK1.8以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为8)时,将链表转化为红黑树,以减少搜索时间
- LinkedHashMap: LinkedHashMap 继承自
HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap
在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。详细可以查看:《LinkedHashMap 源码详细分析(JDK1.8)》
- HashTable: 数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的
- 【list|集合总结(Collection,List,Set,Map)(补充集合结构图的关系)】TreeMap: 红黑树(自平衡的排序二叉树)
文章图片
推荐阅读
- 图书集合完毕
- 7.9号工作总结~司硕
- 最有效的时间管理工具(赢效率手册和总结笔记)
- 数据库总结语句
- 周总结|周总结 感悟
- 周总结43
- 参加【21天写作挑战赛】,第七期第14天,挑战感受小总结
- Quartz|Quartz 源码解析(四) —— QuartzScheduler和Listener事件监听
- 第二阶段day1总结
- Flutter的ListView