文章目录
- Collection接口和常用方法
- > Collection接口常用方法
- > Collection接口遍历元素:使用Iterator(迭代器)
- > Collection接口遍历元素:增强 for 循环
Collection接口和常用方法
Collection接口实现类的特点:
public interface Collection<E> extends Iterable<E>
- Collection实现子类可以存放多个元素,每个元素可以是Object
- 有些Collection的实现类,可以存放重复的元素,有些不可以;
- 有些Collection的实现类,有些是有序的(List),有些则不是有序(Set);
- Collection接口没有直接的实现子类,是通过它的子接口List和Set来实现的;
> Collection接口常用方法
- add : 添加单个元素;
- remove : 删除指定元素;
- contains : 查找元素是否存在;
- size : 获取元素个数;
- isEmpty : 判断是否为空;
- clear : 清空;
- addAll : 添加多个元素;
- containaAll :查找多个元素是否都存在;
- removeAll : 删除多个元素;
以 ArrayList 实现类来演示:
import java.util.ArrayList;
import java.util.List;
public class CollectionMethod {
public static void main(String[] args) {
//1.add:添加单个元素
List list = new ArrayList();
list.add("字符串");
list.add(128);//list.add(new Integer(10))
list.add(true);
System.out.println("list="+list);//list=[字符串, 128, true]
//2.remove:删除指定元素
//list.remove(0);//删除第一个元素
//System.out.println("list="+list);//list=[128, true]
list.remove("字符串");//指定删除某个元素
System.out.println("list="+list);//list=[128, true]
//3.contains:查找某个元素是否存在
System.out.println(list.contains(128));//true
//4.size:返回元素个数
System.out.println(list.size());//2
//5.isEmpty:判断是否为空
System.out.println(list.isEmpty());//false
//6.clear:清空
list.clear();
System.out.println("list= "+list);//list= []
//7.addAll:添加多个元素
ArrayList list2 = new ArrayList();
list2.add("开心");
list2.add("每");
list2.add(1);
list2.add("天");
list.addAll(list2);//传入一个集合
System.out.println("新的list:"+list);//新的list:[开心, 每, 1, 天]
//8.containsAll:查找多个元素是否存在
System.out.println(list.containsAll(list2));//true
//9.removeAll:删除多个元素
list.removeAll(list2);
System.out.println("list="+list);//list=[]
}
}
> Collection接口遍历元素:使用Iterator(迭代器)
- Iterator对象称为迭代器,主要用于遍历Collection集合中的元素;
- 所有实现了Collection接口的集合类都有一个 iterator( ) 方法,用以返回一个实现了Iterator接口的对象,即返回一个迭代器;
- Iterator仅用于遍历集合,Iterator本身并不存放对象;
迭代器执行原理:
Iterator iterator = new coll.iterator(); 得到一个集合迭代器
hasNext() :判断是否还有下一个元素
while(iterator.hasNext()){
next()作用:指针下移,将下移后以后集合位置上的元素返回
System.out.println(iterator.next());
}
每 next() 一次,箭头下移一次:
注意:在调用 iterator.next( ) 方法之前,必须要调用iterator.hasNext( ) 进行检测;若不调用,且下一条记录无效,直接调用 iterator.next( ) 会抛出 NoSuchElementException异常。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionIterator {
public static void main(String[] args) {
Collection col = new ArrayList();
col.add(new Book("三国演义","罗贯中",10.1));
col.add(new Book("红楼梦","曹雪芹",34.6));
col.add(new Book("西游记","吴承恩",28.8));
System.out.println("col : "+col);
//col : [Book{name='三国演义', author='罗贯中', price=10.1}, Book{name='红楼梦', author='曹雪芹', price=34.6}, Book{name='西游记', author='吴承恩', price=28.8}]
//遍历 col
//1.先得到col集合对应的迭代器
Iterator iterator = col.iterator();
//2.使用while循环遍历
//快捷键快速生成while循环 输入itit回车即可
//crtl+j 可以查看当前所有快捷键
while(iterator.hasNext()){ //判断是否还有数据
//next()返回下一个元素,类型是Object
Object obj = iterator.next();
System.out.println(obj);
//Book{name='三国演义', author='罗贯中', price=10.1}
//Book{name='红楼梦', author='曹雪芹', price=34.6}
//Book{name='西游记', author='吴承恩', price=28.8}
//3.当退出while循环后,此时iterator迭代器指向最后的元素
//iterator.next(); --> NoSuchElementException
//4.若还要使用迭代器,需要重置迭代器
iterator = col.iterator();
}
}
}
class Book{
private String name;
private String author;
private double price;
public Book(String name, String author, double price) {
this.name = name;
this.author = author;
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
'}';
}
}
> Collection接口遍历元素:增强 for 循环
增强for循环,可以代替 iterator迭代器,特点:增强for循环就是简化版的iterator,本质一样,只能用于遍历集合或数组;
基本语法:
for(元素类型 元素名 : 集合名或数组名){
访问元素
}
import java.util.ArrayList;
import java.util.Collection;
public class CollectionIterator {
public static void main(String[] args) {
Collection col = new ArrayList();
col.add(new Book("三国演义","罗贯中",10.1));
col.add(new Book("红楼梦","曹雪芹",34.6));
col.add(new Book("西游记","吴承恩",28.8));
//增强for循环 不仅可以用于集合,数组也同样适用
//底层仍然是迭代器iterator 相当于简化版迭代器
//快捷键 输入I后回车
for (Object book:col) {
System.out.println(book);
}
//Book{name='三国演义', author='罗贯中', price=10.1}
//Book{name='红楼梦', author='曹雪芹', price=34.6}
//Book{name='西游记', author='吴承恩', price=28.8}
}
}
class Book{
private String name;
private String author;
private double price;
public Book(String name, String author, double price) {
this.name = name;
this.author = author;
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"name='" + name + '\'' +
", author='" + author + '\'' +
", price=" + price +
'}';
}
}