目录
一、集合概述
1. 集合的概念和作用
数组其实就是一个集合。集合实际上就是一个容器,可以来容纳其它类型的数据。
集合是一个容器,是一个载体,可以一次容纳多个对象。在实际开发中,假设连接数据库,数据库当中有 10 条记录,那么假设把这 10 条记录查询出来,在 Java 程序中会将 10 条数据封装成 10 个 Java 对象,然后将 10 个 Java 对象放到某一个集合当中,将集合传到前端,然后遍历集合,将一个数据一个数据展现出来。所以集合当中存储的都是 Java 对象的内存地址(或者说集合中存储的是引用)。
在 Java 中每一个不同的集合,底层会对应不同的数据结构。往不同的集合中存储元素,等于将数据放到了不同的数据结构当中。
2. 集合的继承关系图
集合在实际中是非常常用的,最好、务必要记熟下图中的继承关系,不仅要对常用的集合类烂熟于心,还要了解其中的源码。
上图中,实线边框的是实现类,比如 ArrayList、LinkedList、HashMap等,折线边框的是抽象类,比如 AbstractCollection、AbstractList、AbstractMap 等,而点线边框的是接口,比如 Collection,Iterator,List 等。彩色标记的都是常用的和需要记忆的内容。
在 Java 中集合主要分为两大类:
-
java.util.Collection:单个方式存储元素,包括 List 和 Set :
- List:是一个有序集合,可以放重复的数据;
- Set:是一个无序集合, 不允许放重复的数据;
-
java.util.Map:以键值对的方式存储元素,包括 Map:
- Map:是一个无序集合,集合中包含一个键对象,一个值对象, 键对象不允许重复,值对象可以重复(例:身份证号—姓名);
二、Collection 部分
Collection 是一个顶层接口,它继承了 java.lang.Iterable 接口和 java.util.Iterator 接口,主要用来定义集合的约定。
1. Iterable 接口
Iterable 接口是祖宗辈的接口,初学者可能容易对 Iterable 和 Iterator 比较糊涂。从图中可以清楚看到它们和 Collection 的关系。
Collection list = new ArrayList();
Iterator it = list.iterator();
上述代码中,对照图来看,集合 list 调用的是来自 java.lang.Iterable 中的 iterator() 方法,返回的是 java.util 包中的 Iterator 对象,这是一个迭代器对象。
迭代器可以用于安全的遍历元素、移除元素、添加元素,此处涉及到 fail-fast 机制。所以可以用迭代器遍历、添加和删除元素尽量使用迭代器。
此外,实现 Iterable 接口允许对象成为 for-each 循环的目标,也就是增强 for 循环,数组也可以使用增强 for 循环。
List<Object> list = new ArrayList(