本节学习目标:
- 了解Java集合框架的概念;
- 了解单列集合框架的概念及特性;
- 了解双列集合框架的概念及特性;
- 了解集合框架中工具接口与工具类。
集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。集合类是可以往里面保存多个对象的类,存放的是对象,不同的集合类有不同的功能和特点,适合不同的场合,用以解决一些实际问题。
java集合类 - 百度百科
集合类(Collection)是Java提供的一组接口以及它们对应的实现类,集合类都位于java.util包下。
集合类可以和数组一样存储多个数据,所以它们又被称为容器(Container)。
原先我们使用数组进行管理多个相同类型的数据,随着使用的频率增加,数组的很多缺点就被暴露出来:
- 数组的长度一经确定就不可改变;
- 数组只能存储一种类型的数据;
- 数组只能存储有序、可重复的数据;
- 数组新增,插入或删除数据效率较低。因为数组的长度不可更改,所以需要进行数组的复制等操作;
- Java没有对数组定义相关的操作方法,所有操作需要用户自己定义;
- 数组由于底层实现为顺序表,所以数组使用的内存空间必须是连续的,因此数组的长度不能定义的太大。
针对以上问题,Java提供了集合框架(Java Collections framework),即集合类,以替代数组来优化缺点:
- 集合的长度是可变的,并且可以需求自动扩增容量;
- 集合可以存储多种类型的数据,尽管不推荐这样做;
- 集合可以存储有序,可重复的数据,也可以存储无序,不可重复的数据;
- 集合底层采用多种结构存储数据,对于增删改查插等操作提供优化,效率较高;
- Java为集合定义了多种操作方法,用户不需自己定义,直接调用即可。
除了上述优点之外,集合类还具有以下特性:
- 集合类只能存储引用数据类型,存储基本数据类型时会自动装箱为对应的包装类;
- 集合使用泛型来限制存储的数据类型,以规避存储多种数据时管理的不便;
Java的集合框架以接口和实现类的方式设计,用户可以选择使用Java已经编写好的标准实现,也可以通过接口以实现自己的集合。
Java集合由单列集合和双列集合组成:
- 单列集合:指Collection接口、它的子接口及其实现类,这类集合只能存储一列数据。
- 双列集合:指Map接口及其实现类,这类集合能存储两列数据。
Java集合类的继承树如图所示:
3. 单列集合框架结构导航:JavaSE - 集合类-单列集合框架
单列集合指只有一列数据的集合,单列集合中的每个数据被称为元素(Element),单列集合使用泛型E限制元素的数据类型。
Java单列集合框架由Collection根接口,继承Collection接口的List和Set子接口,以及它们对应的多种实现类构成:
3.1 单列集合框架的特性- List集合:List接口及其实现类,List集合存储有序的,可重复的数据。
- ArrayList集合(常用):ArrayList类,实现了List接口。底层使用数组(顺序表)存储数据,是List集合的主要实现类;
- linkedList集合:linkedList类,实现了List接口。底层使用双向链表存储数据,增删插效率较高;
- Vector集合(基本已经弃用):Vector类,实现了List接口。底层使用数组(顺序表)存储数据,使用同步方法提供线程安全。
- Set集合:Set接口及其实现类,Set集合存储无序的,不可重复的数据。
- HashSet集合(常用):HashSet类,实现了Set接口。底层使用哈希表+红黑树(自平衡二叉树)存储数据(由一个HashMap对象提供支持),是Set集合的主要实现类;
- linkedHashSet集合:linkedHashSet类,实现了Set接口。底层使用哈希表+红黑树+双向链表存储数据,哈希表保证元素唯一,链表保证元素有序;
- TreeSet集合:TreeSet类,实现了Set接口。底层使用红黑树存储数据,使用比较器保证元素唯一和元素有序。
实际开发中根据实际需求选择适合的集合实现类,如果对现有实现类不满足,可以自己编写集合类并实现相关接口。
4. 双列集合框架结构导航:JavaSE - 集合类-双列集合框架
双列集合指有两列数据的集合,双列集合中的每个数据被称为键值对(Entry)。
键值对由两个数据组成:
- 键(Key):使用泛型K限制数据类型,键不可重复(唯一),数据结构也只对键有效;
- 值(Value):使用泛型V限制数据类型,值可以重复。
Java双列集合框架由Map接口及其多种实现类构成:
4.1 双列集合框架的特性- Map集合:Map接口及其实现类,存储键值对形式的数据。
- HashMap集合(常用):HashMap类,实现了Map接口。底层使用哈希表+红黑树(自平衡二叉树)存储数据;
- linkedHashMap集合:linkedHashMap类,实现了Map接口。底层使用哈希表+红黑树+双向链表存储数据,哈希表保证键唯一,双向链表保证键有序。
- Hashtable集合:Hashtable类,实现了Map接口。底层使用哈希表存储数据,使用同步方法提供线程安全;
- TreeMap集合:TreeMap类,实现了Map接口。底层使用红黑树存储数据,使用比较器保证元素唯一和元素有序。
实际开发中根据实际需求选择适合的集合实现类,如果对现有实现类不满足,可以自己编写集合类并实现相关接口。
5. 集合框架的工具接口与工具类导航:JavaSE - 集合类-工具类
Java集合框架提供了很多工具接口(如迭代器,比较器和过滤器等)和Collections工具类来帮助我们处理集合。



