单列集合Collection
1. 三个子接口
List:List 是有序的集合,可以存储重复元素。它通过索引访问元素。
Set:Set 是不允许重复元素的集合。它不保证元素的顺序,因此其实现类通常不会记住元素的插入顺序。
Queue:Queue 是一种先进先出(FIFO)的集合,通常用于实现队列数据结构。
单列集合在Java中有几种接口和实现类,其中包括List、Set和Queue等。
2.实现类:
ArrayList:ArrayList 是基于动态数组实现的,它提供了动态增长的能力,并允许快速的随机访问。
LinkedList:LinkedList 是基于双向链表实现的,它提供了快速的插入和删除操作,在元素的首尾操作上性能较好。
HashSet:HashSet 是基于哈希表实现的,它提供了快速的查找、插入和删除操作,但不保证顺序。
TreeSet:TreeSet 是基于红黑树实现的,它可以对元素进行排序,并提供了一些额外的操作。
PriorityQueue:PriorityQueue 是基于优先级堆实现的,它根据元素的优先级顺序进行排序。
3 区别
1. List vs Set vs Queue:
List 接口允许存储重复元素,并且能够按照索引访问元素。
Set 接口不允许存储重复元素,并且通常不保证顺序。
Queue 接口通常用于实现队列数据结构,提供了队列特有的操作。
2. ArrayList vs LinkedList:
ArrayList 基于动态数组实现,能够提供快速的随机访问。
LinkedList 基于双向链表实现,提供了快速的插入和删除操作。
3. HashSet vs TreeSet:
HashSet 是基于哈希表实现的,提供了快速的查找、插入和删除操作。由于其哈希的特性,无法保证元素的顺序。
TreeSet 是基于红黑树实现的,并能够对元素进行排序。
4. Queue 接口的实现:
PriorityQueue 基于优先级堆实现,用于实现队列的优先级操作。
双列Map
1. HashMap:
使用哈希表实现,提供了快速的插入、删除和查找操作。
不保证映射的顺序,即不保证迭代顺序与插入的顺序相同。
允许键值为 null,但只有一个键值对可以为 null。
2. TreeMap:
基于红黑树实现,对键进行排序,提供了一些额外的操作,如根据键的自然顺序或自定义比较器排序。
提供有序的键值视图,按照键的排序顺序进行迭代。
3. LinkedHashMap:
继承自 HashMap,通过双向链表维护插入顺序或访问顺序,因此可以保留插入顺序或访问顺序。
在迭代时可以按照插入顺序或访问顺序进行迭代。
4. ConcurrentHashMap:
线程安全的 Map 实现,采用分段锁机制,允许多个读操作并发进行,同时支持并发的读写操作。
相比 Hashtable 采用了更细粒度的锁,并发性能更高。
5. Hashtable:
HashTable 是早期的 Map 实现之一,使用 synchronized 方法保证线程安全。
不推荐使用,因为其同步开销比 ConcurrentHashMap 大,性能相对较低。
6. EnumMap:
使用枚举类型作为键的高性能 Map 实现,效率较高,因为底层使用数组实现。