Collection接口

时间:2024-12-15 07:09:03

目录

一. 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() 方法.