一、集合 List、Set、Map
1.List 有序, 可重复,允许有 null 值
(1)ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
(2)LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
2.Set 无序,唯一,不可重复(可以给数据去重)
(1)HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
依赖两个方法:hashCode()和 equals()
3.Map(键不允许重复,无序,初始容量是 16,加载因子是 0.75)
(1)HashMap
底层数据结构在 JDK1.8 之前的实现方式 数组+链表
;在 JDK1.8 之后的实现方式是数组+链表或者数值+红黑树
非线程安全,高效,支持 null 值和 null 键,线程不安全。
(2)HashTable
线程安全,低效,不支持 null 值和 null 键;
二、List 和 Set、Map 的区别
(1)List 和 Set 是存储单列数据的集合;Map 是存储键值对这样的双列数据的集合;
(2)List 中存储的数据是有顺序的,并且值允许重复;Map 中存储的数据是无序的,它的键是不允许重复的,但是值是允许重复的;
(3)Set 中存储的数据是无顺序的,并且不允许重复,但元素在集合中的位置是由元素的 hashcode 决定,即位置是固定的(Set 集合是根据 hashcode 来进行数据存储的,所以位置是固定的,但是这个位置不是用户可以控制的,所以对于用户来说 set 中的元素还是无序的)。