Java 集合

原文: https://javabeginnerstutorial.com/core-java-tutorial/collection-in-java/

在 JDK 1.2 中添加了集合框架,并在 1.4 -1.6 中对其进行了扩展

集合框架的接口金额类

集合 API 提供了一组接口供您选择,但同时也为您提供了一些可直接使用的具体类。

核心接口

  • Collection
  • List
  • Set
    • SortedSet (扩展Set接口)
    • NavigableSet(扩展SortedSet
  • Map
    • SortedMap (扩展Map接口)
    • NavigableMap(扩展SortedMap
  • Queue

实现类

1 Map

  • HashMap
  • HashTable
  • TreeMap
  • LinkedHashMap

2 Set

  • HashSet
  • LinkedHashSet
  • TreeSet

3 List

  • ArrayList
  • Vector
  • LinkedList

4 Queue

  • AbstractQueue
    1. ArrayBlockingQueue
    2. ConcurrentLinkedQueue
    3. DelayQueue
    4. LinkedBlockingDeque
    5. LinkedBlockingQueue
    6. LinkedTransferQueue
    7. PriorityBlockingQueue
    8. PriorityQueue
    9. SyncronizedQueue

5 Deque

  • ArrayDeque
  • ConcurrentLinkedDeque

6 数组

并非集合框架中的所有类都实现Collection接口。

没有与Map相关的类&接口从Collection扩展。

集合也可以基于排序和排序进行划分。


1 - 有序集合

有序集合可以以特定顺序(非随机)进行迭代。 例如:数组,哈希表

  1. LinkedHashSet(迭代顺序是可预测的)
  2. 数组
  3. HashTable
  4. ArrayList

2 – 无序集合

  1. HashSet

3 - 排序的集合

在排序的集合中,集合的顺序是根据某些规则确定的。 例如List


List接口

属性

关注索引

具有与索引(indexOf ..)相关的方法

按索引位置排序

ArrayList

语法

  1. List l = new ArrayList<E>();

属性

  • 可增长数组
  • 快速迭代
  • 快速随机访问
  • 按索引排序

Vector

ArrayList相同,但Vector中的方法是同步的。


LinkedList

属性

  • 元素彼此双重链接。
  • 按索引位置排序
  • 适用于实现栈和队列
  • 快速插入和删除

Set接口

设置用于考虑对象唯一性的情况。 不允许重复的对象。 若要确定两个对象是否相等,Set使用equals()hashcode()方法。


HashSet

属性

  • 无序
  • 使用对象的哈希码
  • 没有重复的对象

LinkedHashMap

  • 有序(插入)
  • 使用对象的哈希码
  • 没有重复的对象

TreeSet

  • 排序(使用树形结构)
  • 使用对象的哈希码
  • 没有重复的对象

——————————————————————————————

并发集合接口

  • BlockingQueue扩展了Queue
  • TransferQueue扩展了BlockingQueue
  • BlockingDeque扩展了BlockingQueue
  • ConcurrentMap扩展了Map

并发集合实现

  • LinkedBlockingQueue扩展了AbstractQueue实现了BlockingQueue
  • ArrayBlockingQueue扩展了AbstractQueue实现了BlockingQueue
  • PriorityBlockingQueue扩展了AbstractQueue实现了BlockingQueue
  • DelayQueue扩展了AbstractQueue实现了BlockingQueue
  • SynchronousQueue扩展了AbstractQueue实现了BlockingQueue
  • LinkedBlockingDeque扩展了AbstractQueue实现了BlockingDeque
  • LinkedTransferQueue扩展了AbstractQueue实现了TransferQueue
  • CopyOnWriteArrayList实现ListRandomAccess
  • CopyOnWriteArraySet扩展AbstractSet
  • ConcurrentSkipListSet扩展了AbstractSet实现了NavigableSet
  • ConcurrentHashMap扩展了AbstractMap实现了ConcurrentMap
  • ConcurrentSkipListMap扩展了AbstractMap实现了ConcurrentNavigableMap

可能有助于决定集合类的因素

为特定问题选择适当的集合时,可以考虑多种因素。 这些因素是:

  1. 排序 - 元素中的某种排序。 例如,排序顺序,插入顺序或没有特定顺序。
  2. 重复项 - 可能或可能不想在集合中允许重复的元素。
  3. 线程安全 - 如果有多个线程访问集合,请确保集合中元素的安全。
  4. 键值对 - 存储在键值对中。
  5. 阻塞操作 - 检索元素时等待集合变为非空。
  6. 随机访问 - 即时检索元素。
  7. 上限 - 要限制集合可以容纳的最大元素数。

还有其他因素,例如优先级,延迟等。

备忘单

  1. 集合是存储对象的数据结构。
  2. 可以添加,删除对象,也可以在集合中对其进行遍历。
  3. 基本集合有 4 种类型
  4. 列表有序允许重复,已索引。
  5. :可以有序或可以无序。 不允许复制
  6. 映射:不允许使用重复的键。
  7. 队列:按 FIFO优先级进行排序。
  8. ArrayList:快速迭代&快速随机访问。
  9. Vector:同步方法。
  10. LinkedList:适用于实现栈和队列。
  11. HashSet:快速访问,没有重复,没有排序。
  12. LinkedHashSet:没有重复,按插入顺序进行迭代。
  13. TreeSet:无重复,按排序顺序进行迭代。