Java集合:JDK中的集合

Java 集合框架概览

简介(Introduction)

jdk中包含了一个集合框架 (collections framework),定义了表示和操作集合的统一方式。集合本身也是对象,但常常用来表示一组其他的对象。

统一的集合框架会带来以下好处:

  • 不需要重新设计、实现数据结构和算法
  • 框架包含性能良好的数据结构和算法实现
  • 框架定义了统一的集合表示方式,为不同的API提供了互操作性
  • 不需要学习多套集合API,降低了学习成本
  • 代码复用

集合框架由以下部分组成:

  • 集合接口(collection interfaces)
  • 通用实现(general-purpose implementations)
  • 旧API的新实现(legacy implementations)
  • 特定实现(special-purpose implementations)
  • 并发实现(concurrent implementations)
  • 包装实现(wrapper implementations)
  • 简单实现(convenience implementations)
  • 抽象实现(abstract implementations)
  • 集合相关算法(algorithms)
  • 基础接口(infrastructure)
  • 数组相关工具类(array utilities)
集合接口(Collection Interfaces)

集合接口分为两组。java.util.Collection是最基础的接口,有如下派生接口:

  • java.util.Set
  • java.util.SortedSet
  • java.util.NavigableSet
  • java.util.Queue
  • java.util.concurrent.BlockingQueue
  • java.util.concurrent.TransferQueue
  • java.util.Deque
  • java.util.concurrent.BlockingDeque

其他的集合接口基于java.util.Map,并不是真正意义上的集合,但是,这些接口中包含集合视图操作,可以支持集合的相关操作。Map有如下派生接口:

  • java.util.SortedMap
  • java.util.NavigableMap
  • java.util.concurrent.ConcurrentMap
  • java.util.concurrent.ConcurrentNavigableMap

集合接口定义的很多修改集合的方法,可以选择性实现,如果具体的实现不支持某种操作,使用时会抛出UnsupportedOperationException,具体可参考特定实现的文档。集合框架规范中做了如下约定:

  • 不可修改(unmodifiable)。集合不支持修改操作,如add,remove, clear
  • 不可变(immutable)。集合不支持修改操作,并保证Collection对象的改变不可见
  • 固定大小(fix-sized)。列表元素个数不变,元素可以改变
  • 随机接入(random access)。列表支持快速访问元素,访问时间一般是常量
集合实现(Collection Implementations)

实现集合接口的类通常命名为<Implementation-style><Interface>。下表总结了集合接口的通用实现

InterfaceHash TableResizable ArrayBalanced TreeLinked ListHash Table + Linked List
SetHashSetTreeSetLinkedHashSet
ListArrayListLinkedList
DequeArrayDequeLinkedList
MapHashMapTreeMapLinkedHashMap

通用的集合实现支持集合接口中的所有可选操作,不限制集合所能包含的元素,并且是非同步的(unsynchronized),Collections类包含了静态工厂方法,能够将很多非同步集合包装为同步集合,新实现集合的迭代器检测到非法并发修改时,都会快速停止迭代(fail-fast)。

JDK中的AbstractCollection,AbstractSet,AbstractList, AbstractSuquentialList和AbstractMap类提供了核心集合接口的基本实现,降低了自定义实现的难度。具体可参考对应抽象集合类的文档,自定义实现时,选择性的覆盖其中的一些方法。

并发集合(Concurrent Collections)

集合经常会在并发编程(concurrent programming)中使用,集合框架中包含了很多并发集合接口和实现。

并发集合接口

  • BlockingQueue
  • TransferQueue
  • BlockingDeque
  • ConcurrentMap
  • ConcurrentNavigableMap

并发集合实现,具体用法参考JDK的API文档

  • LinkedBlockingQueue
  • ArrayBlockingQueue
  • PriorityBlockingQueue
  • DelayQueue
  • SynchronousQueue
  • LinkedBlockingDeque
  • LinkedTransferQueue
  • CopyOnWriteArrayList
  • CopyOnWriteArraySet
  • ConcurrentSkipListSet
  • ConcurrentSkipListMap
  • ConcurrentHashMap
设计目标(Design Goals)

集合框架的主要设计目标是形成一套在代码量和概念上足够轻量的API。其中很重要的一点是,新特性的引入不会给现有的API使用者增加负担,做增量修改,而不是替代。另外,新的API需要功能足够强大,满足不同场景下的使用需求。

为了保持接口中方法数量足够少,核心接口不会定义集合的可变性(mutability)、可修改性(modifiability)、大小可变化性(resizability)等,而是将其作为可选操作,具体的实现通过抛出UnsupportedOperationException异常表明不支持某项操作,

核心接口只会在下面的情况中定义新的方法:

  • 基础操作(fundamental operation)
  • 接口可以提供最佳实现

框架还提供了一些方法,使集合可以转换为数组,数组可以提供集合视图,哈希可以提供集合视图等

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值