集合总接口层次图
容器是什么呢?就是容纳物体的东西,如我们之前学的数组就是一种容器。
数组的优势:是一种简单的线性序列,可以快速地访问数组元素,效率高。如果从效率和类型检查的角度讲,数组是最好的。
数组的劣势:不灵活。容量需要事先定义好,不能随着需求的变化而扩容。比如:我们在一个用户管理系统中,要把今天注册的所有用户取出来,那么这样的用户有多少个?我们在写程序时是无法确定的。因此,在这里就不能使用数组。
基于数组并不能满足我们对于“管理和组织数据的需求”,所以我们需要一种更强大、更灵活、容量随时可扩的容器来装载我们的对象。 这就是我们今天要学习的容器,也叫集合(Collection)。以下是容器的接口层次结构图:
为了能够更好的学习容器,我们首先要先来学习一个概念:泛型。
泛型
泛型是JDK1.5以后增加的,它可以帮助我们建立类型安全的集合。在使用了泛型的集合中,遍历时不必进行强制类型转换。JDK提供了支持泛型的编译器,将运行时的类型检查提前到了编译时执行,提高了代码可读性和安全性。
泛型的本质就是“数据类型的参数化”。 我们可以把“泛型”理解为数据类型的一个占位符(形式参数),即告诉编译器,在调用泛型时必须传入实际类型。
1 | /** |
Collection接口
Collection 表示一组对象,它是集中、收集的意思。Collection接口的两个子接口是List、Set接口。
Collection接口中定义的方法
由于List、Set是Collection的子接口,意味着所有List、Set的实现类都有上面的方法
List特点和常用方法
List是有序、可重复的容器。 有序:List中每个元素都有索引标记。可以根据元素的索引标记(在List中的位置)访问元素,从而精确控制这些元素。可重复:List允许加入重复的元素。更确切地讲,List通常允许满足 e1.equals(e2) 的元素重复加入容器。
除了Collection接口中的方法,List多了一些跟顺序(索引)有关的方法,参见下表:
List接口常用的实现类有3个:ArrayList、LinkedList和Vector。
1. ArrayList:底层使用数组实现
2. LinkedList:底层使用链表实现
3. Vector:底层使用数组实现,而且是线程安全的
### List的常用方法
1 | public class TestList { |
### 两个List之间的元素处理
1 | public class TestList { |
### List中操作索引的常用方法
1 | public class TestList { |
## ArrayList集合的底层源码
请移步Java基础提高