Collections Framework Overview

  • | ——- | ———————————————————— | ——- | ———————————————————— | ————— |
    通用实现支持Collection中的所有 可选操作,并且对它们可能包含的元素没有限制。它们是不同步的,但是Collections类包含称为同步包装器的静态工厂,可用于将同步添加到许多未同步的集合中。所有新的实现都有故障快速迭代器,该迭代器检测无效的并发修改,并且快速,干净地失败(而不是行为异常)。

AbstractCollectionAbstractSetAbstractList中AbstractSequentialListAbstractMap类提供核心集合接口的基本实现,以最小化来实现他们的工作所需。这些类的API文档精确地描述了每种方法的实现方式,因此,在特定实现的基本操作性能不变的情况下,实现者知道必须重写哪些方法。

并发集合

使用来自多个线程的集合的应用程序必须经过仔细编程。通常,这称为并发编程。Java平台包括对并发编程的广泛支持。有关详细信息,请参见Java并发实用程序

集合是如此频繁地使用,以至于各种并发的友好接口和集合的实现都包含在API中。这些类型超出了前面讨论的同步包装程序的范围,可提供并发编程中经常需要的功能。

这些concurrent-aware interfaces可用:

  • BlockingQueue阻塞队列
  • TransferQueue传输队列
  • BlockingDeque阻塞双端队列
  • ConcurrentMap并发图
  • ConcurrentNavigableMap并发导航图

可以使用以下concurrent-aware 实现类。这些实现的正确用法,请参阅API文档。

  • LinkedBlockingQueue
  • ArrayBlockingQueue
  • PriorityBlockingQueue
  • DelayQueue延迟队列
  • DelayQueue同步队列
  • LinkedBlockingDeque
  • LinkedTransferQueue
  • CopyOnWriteArrayList
  • CopyOnWriteArraySet
  • ConcurrentSkipListSet
  • ConcurrentHashMap
  • ConcurrentSkipListMap

设计目标

主要设计目标是生产一种尺寸更小且更重要的是“概念重量”的API。至关重要的是,新功能与当前的Java程序员似乎并没有太大的区别。它必须增加现有设施,而不是更换它们。同时,新的API必须足够强大才能提供前面描述的所有优点。

为了使核心接口的数量保持较小,接口不会尝试捕获诸如可变性,可修改性和可缩放性之类的细微差别。相反,核心接口中的某些调用是可选的,使实现可以引发UnsupportedOperationException来指示它们不支持指定的可选操作。集合实现者必须清楚地记录实现支持哪些可选操作。

为了使每个核心接口中的方法数量保持较小,接口仅在满足以下任一条件时才包含方法:

  • 这是真正的基本操作:可以合理定义其他基本操作的基本操作,
  • 有一个令人信服的性能原因,为什么重要的实现方案想要覆盖它。

至关重要的是,所有合理的馆藏表现形式都必须能够良好地互操作。这包括数组,在不更改语言的情况下不能直接实现Collection接口。因此,该框架包括以下方法:使集合能够移动到数组中,将数组视为集合,将maps视为集合。

https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!