一、Collection接口及其子类
- List:列表,可以存储有序的、可重复的元素。
- ArrayList:基于数组实现的动态数组,可以动态增长和缩小。它提供了快速的随机访问,但在列表中间进行插入和删除操作可能较。
- LinkedList:基于双向链表实现的列表,具有高效的插入和删除操作(特别是在列表头部和尾部),但随机访问效率较低。
- Vector:与ArrayList类似,但它是线程安全的,适用于多线程环境。然而,由于线程安全性的开销,Vector的性能通常比ArrayList差。
- Stack:栈是后进先出(LIFO)的数据结构,Java提供了Stack类来实现栈的功能。它继承自Vector,因此也是线程安全的。
- Set:集合,用于存储无序的、不重复的元素。
- HashSet:基于哈希表实现的集合,不允许重复元素,且元素是无序的。它提供了快速的查找和插入操作。
- LinkedHashSet:具有HashSet的所有特性,同时它还维护了一个双向链表来记录元素的插入顺序。因此,LinkedHashSet是有序的,迭代时会按照元素的插入顺序进行。
- TreeSet:基于红黑树实现的集合,不允许重复元素,且元素是有序的。TreeSet会根据元素的自然顺序或指定的排序规则进行排序。
- Queue:队列,用于存储一组元素,并支持在两端插入和删除元素(但通常只在一端进行插入,在另一端进行删除)。
- PriorityQueue:优先队列,它的元素会按照优先级进行排序。优先级可以通过元素的自然顺序或提供的Comparator来确定。
- ArrayDeque:双端队列,支持在两端插入和删除元素。它基于数组实现,没有容量限制(在内存允许的情况下)。
- LinkedList(作为Queue实现):也是双端队列的一种实现,支持在两端插入和删除元素。但由于它是基于链表的,所以随机访问效率较低。
二、Map接口及其子类
- HashMap:基于哈希表实现的映射,允许使用null键和null值。它不保证映射的顺序;特别是它不保证顺序会随着时间的推移保持不变。
- LinkedHashMap:具有HashMap的所有特性,同时它还维护了一个双向链表来记录键值对的插入顺序。因此,LinkedHashMap是有序的,迭代时会按照键值对的插入顺序进行。
- TreeMap:基于红黑树实现的映射,不允许使用null键,但允许使用null值。TreeMap会根据键的自然顺序或指定的排序规则进行排序。
- Hashtable:类似于HashMap,但它是线程安全的,且不允许使用null键和null值。然而,由于线程安全性的开销,Hashtable的性能通常比HashMap差。
- ConcurrentHashMap:是HashMap的线程安全版本,适用于多线程环境。它提供了高效的并发访问性能,同时保证了线程安全。
三、其他特殊用途的容器类
- BitSet:用于表示一组位或布尔值的容器。它提供了一种紧凑的方式来存储大量的布尔值。
- Properties:是Hashtable的子类,通常用于处理配置文件中的键值对。它提供了方便的方法来加载和存储属性文件。