在 Java 中,有许多常用的集合类可供使用。以下是一些常见的集合类:
- ArrayList:基于数组实现的动态数组,提供了动态添加、删除和访问元素的功能。
- LinkedList:基于链表实现的双向链表,提供了在任意位置插入、删除和访问元素的功能。
- HashSet:基于哈希表实现的无序集合,不允许重复元素,并且不保证元素的顺序。
- TreeSet:基于红黑树实现的有序集合,按照元素的自然顺序或者指定的比较器进行排序。
- HashMap:基于哈希表实现的无序键值对集合,通过键来存储和访问值,不允许重复的键。
- TreeMap:基于红黑树实现的有序键值对集合,按照键的自然顺序或者指定的比较器进行排序。
- LinkedHashMap:基于哈希表和双向链表实现的有序键值对集合,保持插入顺序或者访问顺序。
- PriorityQueue:基于堆实现的优先队列,可以按照自然顺序或者指定的比较器对元素进行排序。
- HashSet、TreeSet、HashMap、TreeMap、LinkedHashSet 和 LinkedHashMap 类都实现了对应的接口 Set、SortedSet、Map、SortedMap、Set 和 Map。
除了上述的集合类,还有一些其他的集合类和接口可供使用,如 LinkedHashSet、LinkedHashMap、EnumSet、EnumMap 等,它们都有各自特定的用途和适用场景。
-
ArrayList(数组列表):
- 基于数组实现的动态数组,可以自动调整大小。
- 可以通过索引访问元素,支持快速随机访问。
- 添加和删除元素时,需要移动其他元素来维护顺序。
-
LinkedList(链表):
- 基于链表实现的双向链表,每个节点都包含对前一个和后一个节点的引用。
- 可以在任意位置插入和删除元素,插入和删除操作比ArrayList更高效。
- 不支持快速随机访问,需要遍历链表来访问元素。
-
HashSet(哈希集合):
- 基于哈希表实现的无序集合,使用哈希函数对元素进行散列存储。
- 不允许重复元素,如果尝试添加重复元素,将被忽略。
- 不保证元素的顺序,因为元素在哈希表中的位置是根据哈希码确定的。
-
TreeSet(树集合):
- 基于红黑树实现的有序集合,可以自动按照元素的自然顺序或者指定的比较器进行排序。
- 不允许重复元素,如果尝试添加重复元素,将被忽略。
- 支持高效地按照顺序访问元素,还提供了一些按范围检索元素的方法。
-
HashMap(哈希映射):
- 基于哈希表实现的无序键值对集合,通过键来存储和访问值。
- 不允许重复的键,如果尝试添加重复键,新值将替换旧值。
- 键和值可以为null。
- 不保证键值对的顺序,因为键的位置是根据哈希码确定的。
-
TreeMap(树映射):
- 基于红黑树实现的有序键值对集合,可以自动按照键的自然顺序或者指定的比较器进行排序。
- 不允许重复的键,如果尝试添加重复键,新值将替换旧值。
- 键和值可以为null。
- 提供了按范围检索键值对的方法。
-
LinkedHashMap(链式哈希映射):
- 基于哈希表和双向链表实现的有序键值对集合,可以保持插入顺序或者访问顺序。
- 对于迭代操作,维护了键值对的顺序,性能略低于
前面提到的 HashSet 和 HashMap。
- 保持插入顺序的访问顺序的 LinkedHashMap 提供了更高效的迭代操作。
- 如果只需要按插入顺序访问元素,可以使用 LinkedHashSet 和 LinkedHashMap。
- PriorityQueue(优先队列):
- 基于堆实现的优先队列,元素按照优先级进行排序。
- 插入元素和获取最高优先级元素的操作具有较高的效率。
- 元素的优先级可以通过自然顺序或者自定义比较器来定义。
-
除了上述的集合类,还有一些其他的集合类和接口可供使用:
- LinkedHashSet:基于哈希表和双向链表实现的有序集合,保持插入顺序。
- LinkedHashMap:基于哈希表和双向链表实现的有序键值对集合,可以保持插入顺序或者访问顺序。
- EnumSet:用于存储枚举类型元素的集合类,内部使用位向量实现,具有高效的存储和操作性能。
- EnumMap:用于存储枚举类型键值对的集合类,内部使用数组实现,键只能是枚举类型,具有高效的存储和操作性能。
-
这些集合类和接口提供了不同的功能和性能特点,您可以根据具体的需求选择适当的集合类来使用。