Collection(下称"对象集") 指一个能够表示一组对象的对象(比如数组)。Java 平台提供了一个 Collections 框架,它是一个统一的架构,用来表示和处理对象集,同时又对每一个具体的对象集做了很多实现上的算法优化。
Collections 框架的主要优点有:
- 降低编程成本:这些数据结构和算法都已经摆在那里,你就不用自己实现了。
- 提升性能:提供的数据结构和算法实现都是高性能的。每个接口内部都提供了多种可以互相替代的实现,程序可以通过替换实现来进行性能调优。
- 提供了无关 API 间的内部交互:建立了一个通用的语义,给 API 传入和传出对象集。
- 更容易学习 API:你不需要学习一些特别的对象集 API。
- 更容易设计和实现 API:你不需要设计和实现一些特别的对象集 API.
- 促进软件复用:框架提供了标准的接口和实现,这本身就是很好的软件复用。
Collections 框架由以下部分组成:
- 对象集接口:表示不同的对象集类型,比如集合(set)、列表(list)、映射(map)等,这些接口形成了框架的基础。
- 通用实现:对象集接口的基本实现。
- 早期实现:一些像 Vector 和 Hashtable 这样在早期 java 版本中就提供的对象集实现,在当前版本也实现了对应的对象集接口。
- 特别目的的实现:适用于特定场景的实现,这些实现带来了特别的性能体验,但也包含一些使用限制和特殊的行为表现。
- 并发实现:为高并发用途而设计的实现。
- 封装实现:对其他实现添加了额外的功能,比如说同步功能。
- 传统实现:高性能的对象集“最小实现”。???
- 抽象实现:为了方便定制实现,实现一部分对象集接口。
- 算法:一组静态方法,提供用于对象集上的有用操作,比如列表的排序。
- 数组工具:用于操作原始类型数据或是引用对象数组的工具函数。不严格地说,这也是 Collections 框架的一部分,这个特性是跟 Collections 框架同步发布的,底层也用了一些共同基础逻辑。
对象集接口
对象集接口主要分为两大类:java.util.Collection 和 java.util.Map
java.util.Collection 的子接口包括:
- java.util.Set
- java.util.SortedSet
- java.util.NavigableSet
- java.util.Queue
- java.util.concurrent.BlockingQueue
BlockingQueue 处理生产者-消费者模式的多线程模型是一把好手。
- java.util.concurrent.TransferQueue
- java.util.Deque
- java.util.concurrent.BlockingDeque
java.util.Map 的子接口包括:
- java.util.SortedMap
- java.util.NavigableMap
- java.util.concurrent.ConcurrentMap
在 Map 基础上提供了一些像 putIfAbsent 这样的原子方法
- java.util.concurrent.ConcurrentNavigableMap
上述接口中有很多方法被标注为可选的(optional),这意味着允许具体的实现类不实现这些方法,被调用到的时候直接抛出一个 UnsupportedOperationException 异常。
通用实现
下面这个表格总结了 Collections 框架中的通用实现类。
接口
|
HashTable
|
Resiable Array
|
Balanced Tree
|
Linked List
|
Hash Table
+ LinkedList
|
Set
|
HashSet
|
|
TreeSet |
|
LinkedHashSet
|
List
|
|
ArrayList
|
|
LinkedList
|
|
Deque
|
|
ArrayDeque
|
|
LinkedList
|
|
Map
|
HashMap
|
|
TreeMap |
|
LinkedHashMap
|
上述的通用实现类都实现了所有的可选操作,对他们装填的元素也没有任何限制。值得注意的是它们都不是线程安全的,另外所有新的实现都有 fail-fast 迭代器,就是在迭代的时候如果检测到容器结构被修改了,就抛出 ConcurrentModificationException 异常。
支持并发的对象集
在并发程序中使用对象集需要非常小心,好在 Collections 框架提供了多种对并发访问友好的 API,这些类型比同步的封装类好用多了。
支持并发的接口如下:
- BlockingQueue
- TransferQueue
- BlockingDeque
- ConcurrentMap
- ConcurrentNavigableMap
对应的实现类如下:
- LinkedBlockingQueue
- ArrayBlockingQueue
- PriorityBlockingQueue
- DelayQueue
- SynchronousQueue
- LinkedBlockingDeque
- LinkedTransferQueue
- CopyOnWriteArrayList
- CopyOnWriteArraySet
- ConcurrentSkipListSet
- ConcurrentHashMap
- ConcurrentSkipListMap
设计哲学
主要的设计目标是产生一个小而精的对象集 API。
为了做到接口数量足够小,对于像可变性、可修改性这样的不同细节,不是通过多个接口来区分,而是通过接口的可选方法来实现。
为了让接口内部的方法足够少,这些方法必须满足下面的某个条件:
- 真的是一个基础操作
- 一些特别高效的实现,覆写了该方法后可以达到显著的性能提升
相关推荐
Java集合框架(JCF:Java Collections Framework)之概述.doc
译自《Data Structures and the Java Collections Framework》,之前在同平台的其他用户下载的这本书,竟然索要积分50。遂感不平,特再次共享这个资源。
数据结构和Java集合框架,从数据结构和JAVA基础的部分阐述Java集合框架,是学习Java的基础支持也是温故集合框架的必须文档,一册在手可以随时查看Java集合框架知识。
Java集合List集合Set集合Map集合Collection和collections工具类的框架图
学习Java集合框架的讲义、笔记,希望大家多提意见。时间关系没有Collections,Arrays的内容,以后补上!
《数据结构和java集合框架》(Data Structures and the Java Collections Frameword)[美]William J.Collins 著 高清PDF格式[共2个压缩包】 第2个
带有简单示例的Java Collections框架教程
《数据结构和java集合框架》(Data Structures and the Java Collections Frameword)[美]William J.Collins 著 高清PDF格式 【共4个压缩包】 第1个
java collection 框架设计大神 Josh Bloch,从各个角度给我们讲解java collection 设计背景和理念。
迭代协议受Smalltalk收集框架的启发,并且这些收集与Java收集框架类型兼容。 Eclipse Collections与Java 8+兼容。 Eclipse Collections是OpenJDK 计划的一部分,并且已针对不同版本的OpenJDK进行了验证。 为什么...
主要介绍了Java集合框架Collections原理及用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
收藏课程 Java Collections框架示例向数字创新一门课程。
《数据结构和java集合框架》(Data Structures and the Java Collections Frameword)[美]William J.Collins 著 高清PDF格式[总两部分,part1]
“集合框架”(Collections Framework)提供了一组精心设计的接口和类,它们以单个单元即集合的形式存储和操作数据组 。对于计算机科学数据结构课程中学到的许多抽象数据类型如映射(map)、集(set)、列表(list)...
Java Collections框架 Java中的I / O和网络 Java并发 Java数据库 Java设计模式 Java中的数据结构 Java中的算法 Java单元测试 [1] Java-基础知识和面向对象[完成] 注意事项[有用的信息]: 程式 : | | | | | | || |...
Collections 源码 java Java-Collection- 对Java的Collection框架源码阅读
Eclipse Collections是Java Collections框架的直接替代品,它将做到这一点! Eclipse Collections具有JDK兼容的List,Set和Map实现,具有丰富的API,以及JDK中找不到的其他类型,例如Bags,Multimaps和BiMaps。 ...
《数据结构和java集合框架》(Data Structures and the Java Collections Frameword)[美]William J.Collins 著 高清PDF格式 【共4个压缩包】 第4个
《数据结构和java集合框架》(Data Structures and the Java Collections Frameword)[美]William J.Collins 著 高清PDF格式 【共4个压缩包】 第3个
《数据结构和java集合框架》(Data Structures and the Java Collections Frameword)[美]William J.Collins 著 高清PDF格式 【共4个压缩包】 第2个