奇怪的Java基础知识增加了:容器

奇怪的Java基础知识增加了:容器_第1张图片

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

奇怪的Java基础知识增加了:容器_第2张图片

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

你可能感兴趣的:(Java基础)