Java 的 Collection 笔记

Collection 接口概述

集合分类

List系列集合:添加的元素是有序可重复有索引的
Set系列集合:添加的元素是无序不重复无索引的
Collection是单列集合的祖宗接口,它的功能是全部单列集合都可以继承使用的

创建Collection对象

Collecion是一个接口,我们不能直接创建他的对象
所以,现在我们学习他的方法时,只能创建他的实现类对象
实现类:ArrayList

目的:为了学习Collection接口里面的方法
所以利用多态的方式来创建对象

1
Collection<String> coll = new ArrayList<>();

Collection 常用方法

基本操作方法

方法 说明 返回值
add(E e) 添加元素到集合 boolean
clear() 清空集合所有元素 void
remove(E e) 删除指定元素 boolean
contains(Object obj) 判断是否包含元素 boolean
isEmpty() 判断集合是否为空 boolean
size() 获取集合元素个数 int

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
public class CollectionMethods {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();

// 1. 添加元素
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
System.out.println("添加后: " + coll);

// 2. 判断元素是否存在
boolean containsResult = coll.contains("aaa");
System.out.println("是否包含aaa: " + containsResult);

// 3. 删除元素
boolean removeResult = coll.remove("aaa");
System.out.println("删除aaa: " + removeResult);
System.out.println("删除后: " + coll);

// 4. 判断集合是否为空
boolean emptyResult = coll.isEmpty();
System.out.println("集合是否为空: " + emptyResult);

// 5. 获取集合大小
int size = coll.size();
System.out.println("集合大小: " + size);

// 6. 清空集合
coll.clear();
System.out.println("清空后: " + coll);
}
}

Collection 遍历方式

1. 迭代器遍历 (Iterator)

核心方法

方法 说明
Iterator<E> iterator() 返回迭代器对象
boolean hasNext() 判断是否有下一个元素
E next() 获取当前元素并移动指针

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class IteratorDemo {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("aaa");
coll.add("bbb");
coll.add("ccc");
coll.add("ddd");

// 获取迭代器对象
Iterator<String> it = coll.iterator();

// 遍历集合
while(it.hasNext()) {
String str = it.next();
System.out.println(str);
}
}
}

迭代器注意事项

  1. 越界异常:指针指向末尾时调用next()会抛出NoSuchElementException
  2. 指针不复位:遍历结束后指针不会重置,需要重新获取迭代器
  3. 单次next:循环中只能调用一次next()方法
  4. 禁止修改:迭代过程中不能用集合方法增删元素

2. 增强for循环 (Enhanced For)

语法格式

1
2
3
for(数据类型 变量名 : 集合/数组) {
// 循环体
}

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
public class EnhancedForDemo {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");

// 增强for遍历
for(String s : coll) {
System.out.println(s);
}
}
}

增强for特点

  • 底层原理:基于迭代器实现
  • 简化代码:比迭代器写法更简洁
  • JDK版本:JDK5+ 支持
  • 适用范围:所有单列集合和数组
  • 变量特性:循环变量是第三方变量,修改不影响原集合

3. Lambda表达式遍历

核心方法

1
default void forEach(Consumer<? super T> action)

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class LambdaDemo {
public static void main(String[] args) {
Collection<String> coll = new ArrayList<>();
coll.add("zhangsan");
coll.add("lisi");
coll.add("wangwu");

// 方式1:匿名内部类
coll.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});

// 方式2:Lambda表达式
coll.forEach((String s) -> {
System.out.println(s);
});

// 方式3:简化Lambda
coll.forEach(s -> System.out.println(s));
}
}

方法细节说明

add() 方法细节

List系列集合:永远返回true
Set系列集合:元素不存在返回true,存在返回false(不允许重复)

contains() 方法细节

底层使用equals方法判断
自定义对象需要重写equals方法

总结对比

遍历方式 优点 缺点 适用场景
迭代器 功能完整,可删除元素 代码相对复杂 需要删除元素时
增强for 语法简洁,易读性好 不能修改集合 简单的遍历操作
Lambda 代码简洁,函数式编程 JDK8+支持 现代Java开发
提示:根据具体需求选择合适的遍历方式,增强for在日常开发中使用最频繁。