集合
一、Collection(单列集合)
1.List(有序(存储与取出的顺序一致),可重复)
1.1. ArrayList
底层数组实现,查询快,增删慢,线程不安全,效率高。
1.2.Vector
底层数据结构是数组实现,查询快,增删慢,线程安全,效率低。
1.3. LinkedList
底层数据结构是链表实现,查询慢,增删快,线程不安全,效率高。
2.Set(无序(存储与取出的顺序不一致),唯一)
2.1. HashSet
底层数据结构由哈希表(实际上是一个 HashMap 实例)实现,它不保证 set 的迭代顺序。允许使用 null 元素,
依赖 hashCode()和equals()方法来区分存入的元素是否相同,来保证存储元素唯一性。
这两个方法(可自动生成)的执行顺序:
首先判断元素的hashCode()值是否相同
否:直接存储到集合
是:继续执行equals(),看其返回值
true:说明元素相同,就不存储
false:说明元素不同,就存储到集合
2.1.1. LinkedHashSet
底层数据结构由哈希表和链表组成。
哈希表保证元素的唯一性,链表保证元素有序(存储和取出一致)。
2.2. TreeSet
底层数据结构是红黑树。(是一种自平衡的二叉树结构)
元素的唯一性:
依靠元素比较的返回值是否为0来决定
元素的有序性:
1.自然排序(元素具备比较性)
无参构造(new TreeSet<T>())使用的是自然排序,让元素所属的类实现自然排序接口,
底层用CompareTo()方法(Comparable接口)来做数据校验
2.比较器排序(集合具备比较性)
构造方法(new TreeSet<T>(Comparator comparator))接收一个比较器接口(其实是该接口的子类对象),
底层使用Compare()方法来做数据校验
二、Map(双列集合)
A:Map集合的数据结构仅仅针对键有效,和值无关。
B:存储的是键值对元素,键是唯一的,值可重复
1. HashMap
底层数据结构由哈希表实现,它不保证 set 的迭代顺序。允许使用 null 元素,
依赖hashCode()和equals()方法来区分存入的元素是否相同,来保证存储元素唯一性。
这两个方法(可自动生成)的执行顺序:
首先判断元素的hashCode()值是否相同
否:直接存储到集合
是:继续执行equals(),看其返回值
true:说明元素相同,就不存储
false:说明元素不同,就存储到集合
1.1. LInkedHashMap
底层数据结构由哈希表和链表组成。
哈希表保证元素的唯一性,链表保证元素有序(存储和取出一致)。
2. Hashtable
Hashtable与HashMap的区别
Hashtable:线程安全,效率低,不允许null键和null值
HashMap:线程不安全,效率高,允许null键和null值
3. TreeMap
底层数据结构是红黑树。(是一种自平衡的二叉树结构)
元素的唯一性:
依靠元素比较的返回值是否为0来决定
元素的有序性:
1.自然排序(元素具备比较性)
无参构造(new TreeSet<T>())使用的是自然排序,让元素所属的类实现自然排序接口,
底层用CompareTo()方法(Comparable接口)来做数据校验
2.比较器排序(集合具备比较性)
构造方法(new TreeSet<T>(Comparator comparator))接收一个比较器接口(其实是该接口的子类对象),
底层使用Compare()方法来做数据校验