一、集合概念
二、Collection 集合体系
2.1 Collection 父接口
- 特点:可以存储任意Object类型对象。
- 常用方法:
表格
| boolean add(Object o) | 向集合添加对象 |
| boolean contains(Object o) | 判断集合是否包含该元素,返回 true/false |
| boolean remove(Object o) | 移除集合中的指定对象 |
| int size() | 获取集合有效元素个数 |
Collection 没有直接实现类,功能由子接口实现。
2.2 List 子接口
- 特点:存储 Object 对象,有序、带下标、允许元素重复
- 下标范围:0 ~ size()-1
List 继承 Collection 全部方法,额外扩展方法:
表格
| add(int index,Object o) | 在指定下标位置插入元素 |
| Object get(int index) | 根据下标获取元素 |
| Object remove(int index) | 根据下标删除元素,返回被删除对象 |
| Object set(int index,Object o) | 修改指定下标元素,返回修改前旧元素 |
| List subList(int fromIndex,int toIndex) | 截取集合,左包含、右不包含 [fromIndex, toIndex‑1] |
2.3 List 实现类
1. ArrayList
- 底层:数组实现
- JDK7:创建对象不会初始化底层数组;第一次执行add()才初始化数组,初始容量默认10;扩容按照1.5 倍扩容。
- 特性:查询效率高;中间插入、删除元素效率低;线程不安全,执行效率高。
- 适用场景:大量做末尾添加、查询操作。
2. Vector
- 底层:数组实现
- JDK1.0;线程安全,效率较低;查询快,中间增删慢。
3. LinkedList
- 底层:双向链表实现
- 查询遍历效率低;中间位置增删元素效率高;线程不安全,效率高。
✨面试题:ArrayList 和 LinkedList 的区别
2.4 List 集合三种遍历方式
① 下标 for 遍历
for(int i = 0 ; i < list.size() ; i++){
Object obj = list.get(i);
}
② for‑each 增强 for 循环(开发常用)
for‑each 底层本质是迭代器
for(Object obj : list){
//操作obj
}
③ Iterator 迭代器遍历
//获取迭代器对象
Iterator<String> it = list.iterator();
while(it.hasNext()){
//hasNext() 判断游标右侧是否还有元素
String str = it.next();
//next()取出下一个元素,无元素会抛出 NoSuchElementException
System.out.println(str);
}
注意:迭代器游标初始位于所有元素最左侧;调用next()之前必须先用hasNext()判断。
2.5 泛型
1)泛型集合
作用:约束集合存储类型,保证数据类型安全,集合元素类型统一。
//完整写法
List<String> list = new ArrayList<String>();
//JDK7之后菱形语法简写
List<String> list = new ArrayList<>();
泛型只能写引用类型;如果需要基本类型,使用对应的包装类。不指定泛型,默认泛型为Object。
2)自定义泛型类
泛型标识一般使用单个大写字母:T、K、V、E
//定义泛型类
class Demo<T>{
//T就当作一种数据类型使用
private T data;
}
//创建对象时指定泛型真实类型
Demo<String> demo = new Demo<>();
- JDK5 之后泛型也可以定义在接口上。
- 使用泛型让代码更加通用灵活,多用于通用工具类、底层框架开发。
2.6 Collections 工具类
java.util.Collections,集合工具类,全部为静态方法,直接类名调用。
表格
| Collections.reverse(List list) | 集合元素反转 |
| Collections.shuffle(List list) | 集合元素随机打乱 |
| Collections.sort(List list) | 集合排序 |
排序注意点:
✨面试题:集合实现排序
- 方式一:实体实现Comparable重写compareTo内置比较器;
- 方式二:调用 list.sort (Comparator) 传入外置比较器(匿名内部类 / Lambda)。


