8.2 Collection和Iterator接口

8.2 Collection和Iterator接口

Collection接口是ListSetQueue接口的父接口,该接口里定义的方法既可用于操作Set集合也可用于操作ListQueue集合。 Collection接口里定义了如下操作集合元素的方法

添加元素到集合的方法

方法 描述
boolean add(Object o) 该方法用于向集合里添加一个元素。如果集合对象被添加操作改变了,则返回true
boolean addAll(Collection c) 该方法把集合c里的所有元素添加到指定集合里。如果集合对象被添加操作改变了,则返回true

从集合中删除元素的方法

方法 描述
boolean remove(Object o) 删除集合中的指定元素o,当集合中包含了一个或多个元素o时,该方法只删除第一个符合条件的元素,并返回true
boolean removeAll(Collection c) 从集合中删除集合c里包含的所有元素(相当于用调用该方法的集合减集合c),如果删除了一个或一个以上的元素,则该方法返回true
boolean retainAll(Collection c) 保留集合c中出现的元素,从集合中删除集合c里不包含的元素,(相当于把调用该方法的集合变成该集合和集合c的交集),如果该操作改变了调用该方法的集合,则该方法返回true
void clear() 清除集合里的所有元素,将集合长度变为0。

查找元素的方法

方法 描述
boolean contains(Object o) 返回集合里是否包含指定元素
boolean containsAll( Collection c) 返回集合里是否包含集合c里的所有元素

集合长度相关方法

方法 描述
boolean isEmpty() 返回集合是否为空。当集合长度为0时返回true,否则返回false
int size() 该方法返回集合里元素的个数

取出迭代器或转为数组

方法 描述
Iterator iterator() 返回一个Iterator对象,用于遍历集合里的元素。
Object[] toArray() 该方法把集合转换成一个数组,所有的集合元素变成对应的数组元素。

程序 Collection集合方法介绍

下面程序示范了如何通过上面方法来操作Collection集合里的元素。

D:\Desktop\随书源码\疯狂Java讲义(第4版)光盘\codes\08\8.2\CollectionTest.java
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
33
34
35
36
37
38
39
40
41
42
43
44
import java.util.*;

public class CollectionTest {
public static void main(String[] args) {
Collection c = new ArrayList();
// 添加元素
c.add("红楼梦");
// 虽然集合里不能放基本类型的值,但Java支持自动装箱
c.add(6);
System.out.println("c集合的元素个数为:" + c.size()); // 输出:2
// 删除指定元素
c.remove(6);
System.out.println("c集合的元素个数为:" + c.size()); // 输出:1
// 判断是否包含指定字符串
// 输出:true
System.out.println("c集合的是否包含\"红楼梦\"字符串:" + c.contains("红楼梦"));
c.add("三国演义");
System.out.println("c集合的元素:" + c); // 输出:[红楼梦, 三国演义]
Collection b = new HashSet();
b.add("三国演义");
b.add("西游记");
System.out.println("b集合的元素:" + b); // [红楼梦, 三国演义]
System.out.println("c集合是否完全包含b集合?" + c.containsAll(b)); // 输出false
// 用c集合减去b集合里的元素
// 从c集合移除b集合中的元素
c.removeAll(b);
System.out.println("c集合的元素:" + c); // [红楼梦]
// 删除c集合里所有元素
c.clear();
System.out.println("c集合的元素:" + c); // []
System.out.println("______________________");
c.add("红楼梦");
c.add("三国演义");

b.add("三国演义");
b.add("西游记");
System.out.println(c);
System.out.println(b);
// b集合只保留c集合中的元素。
// 求b集合和c集合的交集
b.retainAll(c);
System.out.println("b集合的元素:" + b);
}
}

上面程序中创建了两个Collection对象,一个是c集合,一个是books集合,其中c集合是ArrayList,而books集合是HashSet()虽然它们使用的实现类不同,但当把它们当成Collection来使用时,使用add,remove,clear等方法来操作集合元素时没有任何区别。

编译和运行上面程序,看到如下运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
c集合的元素个数为:2
c集合的元素个数为:1
c集合的是否包含"红楼梦"字符串:true
c集合的元素:[红楼梦, 三国演义]
b集合的元素:[三国演义, 西游记]
c集合是否完全包含b集合?false
c集合的元素:[红楼梦]
c集合的元素:[]
______________________
[红楼梦, 三国演义]
[三国演义, 西游记]
b集合的元素:[三国演义]

总结

Collection的用法有: 添加元素删除元素返回元素个数 以及清空整个集合等。
当使用System.outprintln()方法来输出集合对象时,将输出[e1,e2,...]的形式,这显然是因为所有的Collection实现类都重写了toString()方法,该方法可以一次性地输出集合中的所有元素。
如果想依次访问集合里的每一个元素,则需要使用某种方式来遍历集合元素,下面介绍遍历集合元素的两种方法。