Skip to content

集合框架

模块 java.base 包java.util 包含集合框架、一些国际化支持类、服务加载器、属性、随机数生成、字符串解析和扫描类、base64 编码和解码、位数组和几个杂项实用程序类。此包还包含遗留集合类和遗留日期和时间类。

Java 集合框架

有关概述、API 大纲和设计原理,请参阅:

有关使用集合框架示例的教程和编程指南,请参阅:

详细

  • Collection interfaces - 操作集合的主要方式。
    • Collection - 一组对象。没有对集合的顺序(如果有的话)或它是否可以包含重复元素做出任何假设。
    • Set - 熟悉的集合抽象。不允许重复元素。可以订购也可以不订购。扩展 Collection 接口。
    • List - 有序集合,也称为 顺序 .通常允许重复。允许位置访问。扩展 Collection 接口。
    • Queue - 设计用于在处理前保存元素的集合。除了基本的 Collection 操作外,队列还提供额外的插入、提取和检查操作。
    • Deque - A double ended queue,支持两端的元素插入和移除。扩展 Queue 接口。
    • Map - 从键到值的映射。每个键可以映射到一个值。
    • SortedSet - 其元素自动排序的集合,无论是在_自然排序_(参见 Comparable 接口)或通过创建 SortedSet 实例时提供的 Comparator 对象。扩展 Set 接口。
    • SortedMap - 映射自动按键排序的映射,或者使用_自然排序_创建SortedMap实例时提供的键或比较器。扩展 Map 接口。
    • NavigableSet - SortedSet 扩展了导航方法,报告给定搜索目标的最接近匹配。可以按升序或降序访问和遍历NavigableSet
    • NavigableMap - SortedMap 扩展了导航方法,返回给定搜索目标的最接近匹配项。 NavigableMap 可以按升序或降序键顺序访问和遍历。
    • BlockingQueue - 一个 Queue,其操作在检索元素时等待队列变为非空,在存储元素时等待队列中的空间可用。 (此接口是 java.util.concurrent 包的一部分。)
    • TransferQueue - 一个 BlockingQueue,生产者可以在其中等待消费者接收元素。 (此接口是 java.util.concurrent 包的一部分。)
    • BlockingDeque - 一个 Deque,其操作在检索元素时等待双端队列变为非空,并在存储元素时等待双端队列中的空间可用。扩展 Deque 和 BlockingQueue 接口。 (此接口是 [java.util.concurrent](https://doc.qzxdp.cn/jdk/20/zh/api/java.base/java/util/concurrent/package-summary.html) 包的一部分。)
    • ConcurrentMap - 具有原子 putIfAbsentremove 和 replace 方法的 Map。 (此接口是 java.util.concurrent 包的一部分。)
    • ConcurrentNavigableMap - 一个 ConcurrentMap 也是一个 NavigableMap 。
  • General-purpose implementations - 集合接口的主要实现。
    • HashSet - Set 接口的哈希表实现。 Set 接口的最佳全面实现。
    • TreeSet - NavigableSet 接口的红黑树实现。
    • LinkedHashSet - Set 接口的哈希表和链表实现。一个插入顺序的 Set 实现,其运行速度几乎与 HashSet 一样快。
    • ArrayList - List 接口的可调整大小数组实现(非同步 Vector )。 List 接口的最佳全面实现。
    • ArrayDeque - Deque 接口的高效、可调整大小的数组实现。
    • LinkedList - List 接口的双向链表实现。如果在列表中频繁插入或删除元素,则提供比 ArrayList 实现更好的性能。还实现了 Deque 接口。通过 Queue 接口访问时,LinkedList 充当 FIFO 队列。
    • PriorityQueue - 无限优先级队列的堆实现。
    • HashMap - Map 接口的哈希表实现(支持 null 键和值的非同步 Hashtable)。 Map 接口的最佳全面实现。
    • TreeMap NavigableMap 接口的红黑树实现。
    • LinkedHashMap - Map 接口的哈希表和链表实现。一个插入顺序的 Map 实现,其运行速度几乎与 HashMap 一样快。也可用于构建缓存(请参阅 removeEldestEntry(Map.Entry) )。
  • Wrapper implementations - 与其他实现一起使用的功能增强实现。仅通过静态工厂方法访问。
    • Collections.unmodifiable_Interface_ - 返回指定集合的不可修改视图,如果用户尝试修改它,则抛出 UnsupportedOperationException
    • Collections.synchronized_Interface_ - 返回由指定(通常是非同步)集合支持的同步集合。只要对后备集合的所有访问都是通过返回的集合进行的,就可以保证线程安全。
    • Collections.checked_Interface_ - 返回指定集合的动态类型安全视图,如果客户端尝试添加错误类型的元素,它会抛出 ClassCastException。语言中的泛型机制提供编译时(静态)类型检查,但绕过该机制是可能的。动态类型安全视图消除了这种可能性。
  • Adapter implementations - 使一个集合接口适应另一个集合接口的实现:
  • Convenience implementations - 收集接口的高性能“迷你实现”。
  • Legacy implementations - 对较旧的集合类进行了改造以实现集合接口。
    • Vector - List 接口的同步可调整大小数组实现与其他遗留方法。
    • Hashtable - Map 接口的同步哈希表实现不允许 null 键或值,以及其他遗留方法。
  • Special-purpose implementations
    • WeakHashMap - Map 接口的实现,仅将 弱引用 存储到其键中。当密钥不再在 WeakHashMap 之外引用时,仅存储弱引用可以使键值对被垃圾回收。此类是使用弱引用功能的最简单方法。它对于实现类似注册表的数据结构很有用,当任何线程不再可以访问其键时,条目的效用就会消失。
    • IdentityHashMap - 基于身份的 Map 实现基于哈希表。此类对于保留拓扑的对象图转换(例如序列化或深度复制)很有用。要执行这些转换,您必须维护一个基于身份的“节点表”,以跟踪哪些对象已经被看到。基于身份的映射还用于在动态调试器和类似系统中维护对象到元信息的映射。最后,基于身份的map可用于防止因故意不正当的 equals 方法而导致的“欺骗攻击”。 (IdentityHashMap 从不在其键上调用 equals 方法。)此实现的另一个好处是速度很快。
    • CopyOnWriteArrayList - 由写时复制数组支持的 List 实现。所有可变操作(例如 add 、 set 和 remove )都是通过制作数组的新副本来实现的。不需要同步,即使在迭代期间也是如此,并且保证迭代器永远不会抛出 ConcurrentModificationException 。此实现非常适合维护事件处理程序列表(更改不频繁,遍历频繁且可能耗时)。
    • CopyOnWriteArraySet - 由写时复制数组支持的 Set 实现。此实现类似于 CopyOnWriteArrayList 。与大多数 Set 实现不同,addremove 和 contains 方法需要的时间与集合的大小成正比。此实现非常适合维护必须防止重复的事件处理程序列表。
    • EnumSet - 由位向量支持的高性能 Set 实现。每个 EnumSet 实例的所有元素都必须是单个枚举类型的元素。
    • EnumMap - 由数组支持的高性能 Map 实现。每个 EnumMap 实例中的所有键都必须是单个枚举类型的元素。
  • Concurrent implementations - 这些实现是 java.util.concurrent 的一部分。
    • ConcurrentLinkedQueue - 基于链接节点的无界先进先出 (FIFO) 队列。
    • LinkedBlockingQueue - 由链接节点支持的可选边界 FIFO 阻塞队列。
    • ArrayBlockingQueue - 由数组支持的有界 FIFO 阻塞队列。
    • PriorityBlockingQueue - 由优先级堆支持的无界阻塞优先级队列。
    • DelayQueue - 由优先级堆支持的基于时间的调度队列。
    • SynchronousQueue - 使用 BlockingQueue 接口的简单集合点机制。
    • LinkedBlockingDeque - 由链接节点支持的可选边界 FIFO 阻塞双端队列。
    • LinkedTransferQueue - 由链接节点支持的无界 TransferQueue
    • ConcurrentHashMap - 基于哈希表的高并发、高性能ConcurrentMap实现。此实现在执行检索时从不阻塞,并使客户端能够选择更新的并发级别。它旨在作为 [Hashtable](https://doc.qzxdp.cn/jdk/20/zh/api/java.base/java/util/Hashtable.html) 的直接替代品。除了实现 ConcurrentMap 之外,它还支持 Hashtable 的所有遗留方法。
    • ConcurrentSkipListSet - 跳过 NavigableSet 接口的列表实现。
    • ConcurrentSkipListMap - 跳过 ConcurrentNavigableMap 接口的列表实现。
  • Abstract implementations - 集合接口的骨架实现,以促进自定义实现。
  • Algorithms - Collections 类包含这些有用的静态方法。
  • Infrastructure
    • Iterators - 类似于熟悉的 Enumeration 接口,但更强大,并且改进了方法名称。
      • Iterator - 除了 Enumeration 接口的功能外,还使用户能够使用定义明确、有用的语义从后备集合中删除元素。
      • ListIterator - 用于列表的迭代器。除了 Iterator 接口的功能外,还支持双向迭代、元素替换、元素插入和索引检索。
    • Ordering
      • Comparable - 赋予一个_自然排序_到实现它的类。自然排序可用于对列表进行排序或维护已排序集合或map中的顺序。许多类被改造来实现这个接口。
      • Comparator - 表示顺序关系,可用于对列表进行排序或维护已排序集合或map中的顺序。可以覆盖类型的自然排序或排序未实现 Comparable 接口的类型的对象。
    • Runtime exceptions
    • Performance
      • RandomAccess - 让 List 实现表明它们支持快速(通常是恒定时间)随机访问的标记接口。这让通用算法在应用于随机或顺序访问列表时改变它们的行为以提供良好的性能。
  • Array Utilities
    • Arrays - 包含用于排序、搜索、比较、散列、复制、调整大小、转换为 String 以及填充基元和对象数组的静态方法。

评论区

欢迎留言、补充或勘误。

xiaoba.blog