奇怪的Java基础知识增加了:容器
分类:
文章
•
2024-07-30 11:14:16

1.List
- ArrayList:ArrayList是基于动态数组实现的,随着向 ArrayList 中不断添加元素,其容量也自动增长,默认的初始容量是10。ArrayList的实现不是同步的。
- Vector:与ArrayList相似,但是它是线程安全的。
- LinkedList:是基于双向链表实现的,对于频繁的插入和删除操作效率较高。实现了 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。此实现不是同步的。
2.Set
- TreeSet:基于红黑树实现,使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。 查找的效率不如HashSet,HashSet的时间复杂度是O(1),TreeSet的时间复杂度是O(logN)。
- HashSet:基于哈希表实现,不能保证set的迭代顺序,特别是它不保证该顺序恒久不变,允许使用null元素。
- LinkedHashSet:内部使用双向链表保证了插入的顺序,具有HashSet的查找效率。
3.Queue
- LinkedList:可以通过此类来实现双线队列。
- PriorityQueue:优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,不允许插入不可比较的对象(这样做可能导致 ClassCastException),优先级队列不允许使用 null 元素。
Map

- HashMap:基于哈希表的Map接口的实现。允许使用 null 值和 null 键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。
- TreeMap:基于红黑树的实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序。
- HashTable:和HashMap类似,是线程安全的。它是遗留类,不应该去使用它,而是使用 ConcurrentHashMap 来支持线程安全,ConcurrentHashMap 的效率会更高,因为 它引入了分段锁。
- LinkedHashMap:基于哈希表和双向链表实现,此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。