Java集合框架概述

主要参考 Collections Framework Overview 这个文档.
如有错误, 恳请指正, 不胜感激😘.

1 简介

集合是一个 表示一组对象 的对象(A collection is an object that represents a group of objects).

Java 平台包含一个 集合框架(collections framework).

集合框架 是一个 表示和操作集合的 统一体系结构(unified architecture), 使集合能够独立于实现细节进行操作.

集合框架 的主要优点 有:

  1. 减少编程工作量(Reduces programming effort)
  2. 提高性能(Increases performance)
  3. 在不相关的 API 之间 提供互操作性(Provides interoperability between unrelated APIs)
  4. 减少 学习 API 所需的 工作量(Reduces the effort required to learn APIs)
  5. 减少 设计和实现 API 所需的 工作量(Reduces the effort required to design and implement APIs)
  6. 促进软件复用(fosters software reuse).

collections framework 的组成:

  1. 集合接口(Collection interfaces), 表示不同类型的集合, 比如 Set, ListMap, 这些接口是框架的基础.
  2. 通用实现(General-purpose implementations), 集合接口的主要实现.
  3. 遗留实现(Legacy implementations), 对老版本的集合类 VectorHashtable 进行改装(retrofit), 以实现集合接口.
  4. 特殊实现(Special-purpose implementations), 为满足特殊情况使用而设计的实现. 这些实现展示非标准的性能特征(nonstandard performance characteristics), 使用限制 或 行为.
  5. 并发实现(Concurrent implementations).
  6. 包装器实现(Wrapper implementations), 主要提供 synchronization 功能.
  7. 便利实现(Convenience implementations).
  8. 抽象实现(Abstract implementations), 集合接口的部分实现, 以方便自定义实现集合接口.
  9. 算法(Algorithms), 执行集合功能的静态方法, 比如排序.
  10. 基础设施(Infrastructure), 为 集合接口 提供基本支持的接口.
  11. 数组实用程序(Array Utilities), 用于 基本类型(primitive type) 和 引用对象 的 utility 方法. 严格来说, 这不属于集合框架, 只是这个功能和集合框架同时被添加到Java平台并且依赖于一些相同的基础设施.

2 集合接口(Collection Interfaces)

集合接口 被分为两组: java.util.Collectionjava.util.Map.
Map 不是真正意义上的集合. 但是有一些接口包含集合视图操作(collection-view operations), 这使得 Map 可以像集合一样被操作.

集合接口中的许多修改方法(modification methods) 都被标记为 optional. 允许接口实现不提供这些方法的实现, 如果尝试使用这些操作 将会 引发运行时异常 UnsupportdOperationException. 每个实现的文档必须指定支持哪些 可选操作(optional operations). 本规范中引入几个术语:

  1. 不支持修改操作(比如add, remove, clear) 的集合 被称为 unmodifiable, 相反就是 modifiable.(我的理解是: unmodifiableA(modifiableA), unmodifiableA不可更改, 但是 modifiableA 可以更改, modifiableA 改变会导致 unmodifiableA 改变)
  2. Collection 对象的所有更改都不可见 的集合 被称为 immutable, 相反就是 mutable. google guava 包里的 ImmutableList 提供了比 Collections.unmodifiableCollection 更强的保证. (immutable 不是包装一个集合, 所以 immutable 集合比 modifiable 更能保证集合的内容不变, 注意: 集合的内容不变指引用不变, 集合内的元素还是是可以变的)
  3. size 保持不变的列表(尽管元素可以改变) 被称为 fixed-size, 相反就是 variable-size.
  4. 支持索引访问元素 的列表 被称为 random access lists, 不支持索引访问元素的 列表 被称为
    sequential access lists.

一些实现限制了什么元素(对于 Map 就是 keys 和 values)可以被存储. 可能的限制包含下面这些:

  1. 属于一个特定类型(particular type)
  2. 不为 null.
  3. Obey some arbitrary predicate. (备注: 没明白这是啥限制, 翻译不出来…)

3 集合实现(Collection Implementations)

实现集合接口的类 一般的命名形式是 Implementation_style + Interface. 下表总结了 通用实现(general purpose implementations):

InterfaceHash TableResizable ArrayBalanced TreeLinked ListHash Table + Linked List
SetHashSet TreeSet LinkedHashSet
List ArrayList LinkedList 
Deque ArrayDeque LinkedList 
MapHashMap TreeMap LinkedHashMap

通用实现支持 集合接口中的 所有 optional 操作 并且 它们所包含的元素没有限制.
这些实现都是 不同步的(unsynchronized).

AbstractCollection, AbstractSet, AbstractList, AbstractSequentialListAbstractMap 类提供了核心集合接口的基本实现, 以最小化实现这些接口所需的工作量.

4 并发集合(Concurrent Collections)

通过多个线程使用集合的应用程序 必须仔细编程. 通常, 这被称为 并发编程(concurrent programming).
Java 平台包含对并发编程的广泛支持.

See Java Concurrency Utilities for details.

集合的使用非常频繁, API中包含了各种并发友好的 集合接口 和 集合实现. 这些类型 提供了并发编程中常用的功能, 超越了 前面提到的并发包装器(synchronization wrappers).

如下, 可用的并发接口(concurrent-aware interfaces):

  1. BlockingQueue
  2. TransferQueue
  3. BlockingDeque
  4. ConcurrentMap
  5. ConcurrentNavigableMap

如下, 可用的并发实现类(concurrent-aware implementation classes):

  1. LinkedBlockingQueue
  2. ArrayBlockingQueue
  3. PriorityBlockingQueue
  4. DelayQueue
  5. SynchronousQueue
  6. LinkedBlockingDeque
  7. LinkedTransferQueue
  8. CopyOnWriteArrayList
  9. CopyOnWriteArraySet
  10. ConcurrentSkipListSet
  11. ConcurrentHashMap
  12. ConcurrentSkipListMap
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值