Java的集合框架主要包括以下接口和它们的一些典型实现类:
集合接口:
-
Collection: 这是所有集合类的根接口,它有三个主要的子接口。
List: 一个有序的集合,允许重复元素。Set: 一个不允许重复元素的集合。Queue: 一个用于持有待处理元素的集合,遵循特定的插入、提取规则。
-
Map: 不属于Collection接口的直接子接口,用于存储键值对的数据结构。
实现类:
-
List接口的实现类:
ArrayList: 动态数组实现,随机访问效率高,但在插入和删除时可能较慢,因为涉及到元素的移动。LinkedList: 双向链表实现,插入和删除操作效率较高,但随机访问效率较低。Vector: 类似于ArrayList,但是是线程安全的,不过因为同步操作导致性能较低,在现代应用中已较少使用。Stack: 是Vector的一个子类,实现了后进先出(LIFO)栈的行为,但通常推荐使用Deque接口的实现类如ArrayDeque来替代。
-
Set接口的实现类:
HashSet: 基于哈希表实现,无序,不允许重复元素,性能依赖于哈希码的质量。LinkedHashSet: 维护元素插入顺序的HashSet,同时保持元素的唯一性。TreeSet: 基于红黑树实现,自然排序或自定义比较器排序,不允许重复元素。
-
Map接口的实现类:
HashMap: 基于哈希表实现,允许null键和值,非线程安全,性能高。LinkedHashMap: 保持插入顺序或访问顺序的HashMap。TreeMap: 基于红黑树实现,按键自然排序或自定义比较器排序,不允许null键。Hashtable: 线程安全的Map实现,但因其同步机制较为原始,性能较低,现代应用中通常使用ConcurrentHashMap替代。
-
Queue接口的实现类:
LinkedList: 也可以作为Queue使用,实现FIFO(先进先出)队列。PriorityQueue: 基于堆实现的优先队列,元素按照自然排序或提供的Comparator排序。ArrayDeque: 可作为双端队列(Deque),提供高效的插入、删除首尾元素操作。
此外,还有其他一些特殊用途的集合类,如EnumSet、EnumMap针对枚举类型的优化集合,以及CopyOnWriteArrayList、CopyOnWriteArraySet这些适用于读多写少并发场景的线程安全集合类。