集合介绍
# 集合介绍
接下来几篇文章,我们将介绍集合类,也算用的非常多的类了。
# 什么是集合
什么是集合?集合就是一堆元素组成的整体,例如
- 一个班的所有学生
- 一个网站的所有商品(或者符合某些条件的商品)
- 一个公司所有的客户
在工作中,我们经常需要处理集合,例如将一些商品从价格排序;筛选符合某些条件的客户……为此,Java 引入了集合类。
# 数组能当集合用吗
在 Java 中,如果一个 Java 对象可以在内部持有若干其他 Java 对象,并对外提供访问接口,我们把这种 Java 对象称为集合。很显然,Java 的数组可以看作是一种集合。但数组不方便:
- 数组初始化后大小不可变;
- 数组只能按索引顺序存取。
因此,我们需要其他的集合类来处理不同的数据,例如可变大小的链表,可以保证无重复的的集合。
# Collection
Java 标准库自带的 java.util
包提供了集合类:Collection
,它是除 Map
外所有其他集合类的根接口。Java 的 java.util
包主要提供了以下三种类型的集合:
List
:一种有序列表的集合,例如,按索引排列的Student
的List
;Set
:一种保证没有重复元素的集合,例如,所有无重复名称的Student
的Set
;Map
:一种通过键值(key-value)查找的映射表集合,例如,根据Student
的name
查找对应Student
的Map
。
Java 集合的设计有几个特点:
- 一是实现了接口和实现类相分离,例如,有序表的接口是
List
,具体的实现类有ArrayList
,LinkedList
等, - 二是支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素,例如:
List<String> list = new ArrayList<>(); // 只能放入String类型
- 最后,Java 访问集合总是通过统一的方式——迭代器(Iterator)来实现,它最明显的好处在于无需知道集合内部元素是按什么方式存储的。
由于 Java 的集合设计非常久远,中间经历过大规模改进,我们要注意到有一小部分集合类是遗留类,还有一些遗留接口,不应该继续使用:
Hashtable
:一种线程安全的Map
实现;Vector
:一种线程安全的List
实现;Stack
:基于Vector
实现的LIFO
的栈。Enumeration<E>
:遗留接口,已被Iterator<E>
取代。
上次更新: 2024/10/1 18:45:09