8.1 Java集合概述
数组无法存放数量变化的数据
数组长度不可变化,一旦在初始化数组时指定了数组长度,这个数组长度就是不可变的,如果需要保存数量变化的数据,数组就有点无能为力了
集合有什么用
为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。
集合类的包
起初所有的集合类都位于java.utiI包下,后来为了处理多线程环境下的并发安全问题,Java 5还在java.util.concurrent包下提供了一些多线程支持的集合类。
集合类与数组的区别
- 数组元素既可以是基本类型的值,也可以是对象的引用变量;
- 集合例不能保存基本类型的值,集合里只能保存对象的引用变量。
集合类的两个根接口
Java的集合类主要由两个接口派生而出: Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
如图8.1所示是Collection接口、子接口及其实现类的继承树。
图8.1显示了Collection体系里的集合,其中粗线圈出的
Collection的子接口
Set,List,Queue这三个接口是Collection接口派生的两个子接口,
Set代表了无序不可重复集合,List代表有序可重复集合;Queue是Java提供的队列实现,有点类似于List.
如图8.2所示是Map体系的继承树,所有的Map实现类用于保存具有映射关系的数据.
图8.2显示了Map接口的众多实现类,这些实现类在功能、用法上存在一定的差异,但它们都有个功能特征:
Map接口
Map保存的每项数据都是key-value对,也就是由key和value两个值组成.Map里的key是不可重复的,key用于标识集合里的每项数据,如果需要查阅Map中的数据时,总是根据Map的key来获取。
对于图8.1和图8.2中粗线标识的4个接口,
- 把一个对象添加到
Set集合时,Set集合无法记住添加这个元素的顺序,所以Set里的元素不能重复,否则系统无法准确识别这个元素; List集合可以记住每次添加元素的顺序、且List的长度可变。Map集合里面的每项数据都由两个值组成。
图8.3显示了这三种集合的示意图。
访问各个集合中元素的区别
- 如果访问
List集合中的元素,可以直接根据元素的索引来访问; - 如果访问
Set集合中的元素,则只能根据元素本身来访问(这也是Set集合里元素不允许重复的原因)。 - 如果访问
Map集合中的元素,可以根据每项元素的key来访问其value;
集合的常见实现类
对于Set、List、 Queue和Map四种集合,最常用的实现类,分别是HashSet、 TreeSet、 ArrayList、 ArrayDeque、 LinkedList和HashMap、 TreeMap这些实现类。
注意
本章主要讲解没有涉及并发控制的集合类,对于Java 5新増的具有并发控制的集合类,以及Java 7新增的TransferQueue及其实现类LinkedTransferQueue,将在笫16章与多线程一起介绍。
原文链接: 8.1 Java集合概述