一.map集合
1.HashMap
(1)底层是链表 + 数组,JDK8 以后加入了红黑树,链表过长时换为红黑树
(2)存储的是 key-value 类型的数据
(3)key 值不允许重复,key 重复会被覆盖,value 可以重复
(4)数据存储无序:无序指的是插入顺序和取出顺序是不一致的
(5)key 和 value 都允许为空,但是只能有一个空的 key

2.TreeMap
(1)有序的 key-value 集合,通过红黑树实现的
(2)元素顺序与添加顺序无序(不一致),不允许重复
(3)key 是有序的
(4)默认会对键进行排序,所以键必须实现自然排序和定制排序中的一种

3.HashTable
(1)基于哈希表实现,键值对存储
(2)线程安全
(3)键和值都不能为 null
(4)性能低于 HashMap
(5)初始容量和负载因子:默认初始容量:11,默认负载因子:0.75。
当元素数量超过容量 × 负载因子时扩容,扩容规则:新容量 = 旧容量 × 2 + 1
(6)使用场景一般为多线程环境和需要线程安全的键值对存储
二.set集合
1.HashSet
(1)HashSet 底层使用的是 HashMap
(2)不能保证元素的顺序,元素是无序的,不能有重复的元素
(3)集合元素值允许为 null
(4)线程不安全

2.LinkedHashSet
(1)LinkedHashSet 底层使用的是 HashSet, 同时使用链表维护元素的插入顺序
(2)元素有序且唯一(输入和输出顺序一样),链表保证元素有序,哈希表保证元素唯一
(3)线程不安全

3.TreeSet
(1)TreeSet 其内部使用的是 TreeMap,TreeMap 是基于红黑树实现的
(2)插入数据内部有两种排序方法:自然排序 (默认)和定制排序
(3)无序:TreeSet 会对插入的数据排序,所以输入顺序和输出顺序不一致
(4)值不能为 null
(5)值唯一
(6)线程不安全

三.list和set的区别
(1)有序性
List 保证按插入顺序排序,Set 存储和取出顺序不一致。
(2)唯一性
List 可以重复,Set 元素唯一。
(3)获取元素
list 可以通过索引直接操作元素,Set 不能根据索引获取元素。


被折叠的 条评论
为什么被折叠?



