目录
一. Collection基本介绍
二. Collection中的方法及其使用
1. 添加元素
(1) 添加单个元素
(2) 添加另一集合中的所有元素
2. 删除元素
(1) 删除单个元素
(2) 删除某个集合中包含在其他集合中的元素
(3) 保留两个集合中的交集部分, 删除其他元素.
3. 遍历元素
(1) 使用 for - each 遍历
(2) 使用迭代器遍历
一. Collection基本介绍
(1) Collection 是集合结构层次中的根接口.
(2) Collection用于存储和组织一组对象 (这些对象也称为Collection的元素).
[注]: 这些对象可以是不同类的对象.
(3) 一些Collection用于存放可重复, 有序的元素(List); 另一些Collection用于存放不可重复, 无序的元素(Set).
二. Collection中的方法及其使用
通过查看文档我们可以看到, Collection主要有以上几种方法. 我把其中比较重要的几个方法勾选了出来. 这些我们要重点熟悉掌握.
下面我们通过代码具体演示一下Collection接口的使用.
首先我们需要创建一个对象, 由于Collection是一个接口, 所以它本身不能实例化, 我们用它的派生类ArrayList来创建一个Collection对象.
[注]: 这里父类引用指向了子类对象, 所以这里就是一个"向上转型", 这里的collection对象只能调用父类Collection中的方法, 不能调用ArrayList中特有的方法.
1. 添加元素
(1) 添加单个元素
只需调用 add() 方法.
Java中, 当我们调用 System.out.println() 方法时打印一个对象时, 实际上是在调用该对象的toString()方法. toString()方法默认返回该对象的类名和hashCode, 但是这个东西通常没什么用. 所以很多类就重写了toString()方法, 返回一个更具描述性的字符串. 这里的ArrayList类就重写了toString()方法.
所以, 这里打印Collection对象时, 就会打印出一个字符串.
(2) 添加另一集合中的所有元素
调用 addAll() 方法, 参数传递一个集合.
如上述代码, 将collection1添加到collection中. 结果如下:
2. 删除元素
(1) 删除单个元素
只需调用remove()方法.
(2) 删除某个集合中包含在其他集合中的元素
使用removeAll()方法. 参数传递一个集合.
上述代码表示的操作就是在collection中删除collection1中的所有元素. 结果如下:
(3) 保留两个集合中的交集部分, 删除其他元素.
使用retainAll() 方法, 参数传递一个集合.
如上述代码, 保留collection和collection1的交集. 结果如下:
3. 遍历元素
(1) 使用 for - each 遍历
(2) 使用迭代器遍历
迭代器 (Iterator) 是Java提供的, 一种专门用来遍历集合的方式.
我们首先需要创建一个迭代器对象. 如何创建呢? 我们知道Collection继承了Iterator类, 而且Collection中有一个iterator()方法, 它的作用就是返回当前集合的迭代器.
所以我们第一步调用Collection的iterator()方法, 创建一个迭代器.
好, 那么有了迭代器对象之后, 下一步该如何遍历呢? --> 调用迭代器对象it的方法.
好, 如上图, Iterator类主要有 hasNext() 方法, next() 方法, remove() 方法. hasNext() 用来判断是否有下一个可迭代的元素, 如果有, 返回true. next() 用来返回下一个元素. remove() 用于删除迭代器刚刚返回的元素.
如上述代码, 如果当前集合的迭代器有下一个可迭代元素, 则打印下一个可迭代元素. 结果如下:
如果我们想边遍历边删除可以吗? 我们来尝试一下:
若使用 Iterator 的 remove() 方法:
若使用 Collection 的 remove() 方法:
我们可以看到, 用 Iterator 的 remove() 方法就能正常删除, 而使用 Collection 的 remove()方法 就不能正常删除. 这是因为 Iterator 的 remove() 方法保证了状态的一致性, 是安全的删除; 而除迭代器删除外的其他删除都无法保证迭代的一致性, 是不安全的.
因此, 若我们想在迭代的同时删除底层集合中的元素, 就只能调用 Iterator 的 remove() 方法.