集合
Java中的集合共有三个大类
集合的体系结构
1. List
有序不唯一。
1.1 ArrayList
底层结构是数组、查询块,更新慢。线程不安全,效率高。
1.2 Vector
底层数据结构是数据结构,查询块,更新慢,线程安全,效率低。
1.3 LinkedList
底层数据结构是链表,查询慢,增删快,线程不安全。
2. Set
有序唯一。
2.1 HashSet
底层数据结构是Hash表,依赖于hashCode()和equals()方法来保证元素唯一性。
2.2 LinkedHashSet
底层数据结构是链表和哈希表;链表保证元素有序,哈希表保证元素唯一。
2.3 TreeSet
底层数据结构是红黑树;自然排序和比较器排序保证数据的有序性;根据比较返回值是否为0来保证元素的唯一性。
3. Map
3.1 HashMap
无序、允许null,但是只允许有一个,效率高,不同步。父类是AbstractMap
3.2 HashTable
无序,线程同步,效率低,不允许null,父类是Dictionary
3.3 TreeMap
有序,
3.4 TreeSet、LinkedHashSet、HashSet
都是在Java中实现的set数据结构。
TreeSet主要用于排序;
LikedHashSet主要用于保证FIFO有序的集合;
HashSet是通用的存储数据集合。
相同点:
都实现Set接口、线程不安全。
速度:
HashSet插入数据最快,其次LinkHashSet,最慢的是TreeSet因为内部实现排序
4. 总述
有序唯一选择Set
、有序不唯一选择List
。
set排序使用TreeSet
或者LinkedHashSet
;最常使用的是HashSet。
list中如果需要线程安全就选择Vector
;查询多使用ArrayList
;修改多使用LinkedList
。
Map:
如果要保证线程安全就选择HashTable
,不考虑线程安全使用HashMap
。