本章内容:
- Collection集合概述
- 集合与数组的区别
- 集合的框架
- 集合框架学习方式
- Collection集合常用功能
- 迭代器的使用
Collection集合
集合概述: 集合是一种java提供的容器,可以用来存储多个数据。
集合与数组的区别:
- 数组的长度固定,集合长度可变
- 数组中存储的是同一种数据类型的元素,可以存储基本数据类型,也可以存储引用数据类型。集合存储的是对象,而且对象的数据类型可以不一致,在开发当中一般当对象多的时候,使用集合来存储对象。
集合的框架
JAVASE提供了满足各种需求的API方法,我们在使用API的时候,要先了解其继承和接口操作的框架,才能了解何时使用哪个类,以及类与类之间如何彼此合作,从而达到灵活运用。
集合根据其存储结构分为两大类:
分别是单列集合------ java.util.Collection
双列集合 ------ java.util.Map
其中绿色是实现类,蓝色是接口。
学习集合的目标
- 会使用集合存储数据
- 能够遍历集合,把元素从集合当中取出来
- 掌握每种集合的独自特性
集合框架体系学习方式
- 学习集合框架顶层:掌握接口或者是抽象类当中的共性方法,所有的子类都可以使用。
- 使用底层集合框架:顶层不是接口就是实现类,需要使用底层的子类创建对象来使用集合。
Collection: 它是单列集合的根接口,用于存储一些列和某些规则的元素,有两种重要的子接口—java.util.List接口 和java.util.Set接口。
List接口的特点:元素有序,可以重复,有索引。主要实现类:java.util.ArrayList 和 java.util.LinkedList
Set接口的特点 :元素无重复,无索引。主要实现类:java.util.HashSet 和java.util.TreeSet
Collection的常用API方法
Collection是所有单列集合的父接口,在Collection集合当中定义了所有单列集合的共性API方法,这些方法适合所有单列集合。
- public boolean add(E e): 把给定的对象添加到当前的集合当中
- public void clear(): 清空所有元素
- public boolean remove(E e) 把给定的对象从当前集合当中删除掉
- public boolean contains(E e) 判断当前集合中是否包含给定的对象
- public boolean inEmpty(): 判断当前集合是不是空
- public int size() 获取当前元素的个数
- public Object[ ] toArray(): 把当前集合中的元素存储到一个数组当中
// 构建集合对象,使用多态
Collection<String> coll1=new ArrayList();
System.out.println(coll1);// [] 说明重写了toString()方法
//如果在创建集合时没有指定集合存储元素的数据类型,系统默认Object
boolean b1 = coll1.add("小王");
//add()方法一般情况下都会返回true,可以不用接收
System.out.println(b1);
System.out.println(coll1);// [小王]
coll1.add("小周1");
coll1.add("小周2");
coll1.add("小周3");
coll1.add("小周4");
System.out.println(coll1);// [小王, 小周1, 小周2, 小周3, 小周4] 有序
/*
void clear() 清空
*/
// coll1.clear();
// System.out.println(coll1);// []
/*
public boolean remove(E e) 删除指定元素
true:删除成功,把给定的元素从当前集合中移除,说明集合中存在该元素
false:如果当前集合中不存在给定的元素,删除失败,返回false
*/
boolean b2 = coll1.remove("小王");
System.out.println(coll1);// [小周1, 小周2, 小周3, 小周4] 删除成功
boolean b3 = coll1.remove("小周5");
System.out.println(b3);// false
/*
public boolean contains(E e) 判断当前集合中是否包含给定的对象
包含就返回true
不包含就返回false
*/
boolean b4 = coll1.contains("小王");
System.out.println(b4);// false
System.out.println(coll1);
boolean b5 = coll1.contains("小周4");
System.out.println(b5);// true
/*
public boolean inEmpty(): 判断当前集合是不是空
true :是空的
false: 不是空的
*/
boolean b6 = coll1.isEmpty();
System.out.println(b6);// false
/* coll1.clear();
boolean b7 = coll1.isEmpty();
System.out.println(b7);*/
/*
public int size() 获取当前元素的个数
*/
int size = coll1.size();
System.out.println(coll1);// [小周1, 小周2, 小周3, 小周4]
System.out.println(size);// 4
/*
public Object[ ] toArray(): 把当前集合中的元素存储到一个数组当中
返回值是一个对象数组
*/
Object[] arr = coll1.toArray();
System.out.println(arr);// 地址值 [Ljava.lang.Object;@1b6d3586
// 遍历
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");// 小周1 小周2 小周3 小周4
}
迭代器Iterator
迭代器接口: 在程序开发过程中,经常需要遍历集合当中的所有元素,JDK官方又提供了一个接口,这个接口是java.util.Iterator。这个接口也是集合当中的一员,但是他与Map Collection接口不同,Collection接口和Map接口主要是用来存储元素,iterator主要是用来迭代访问Collection与Map接口的当中的元素。因此我们也经常把Iterator对象称为迭代器。想要遍历Collection集合当中的元素,需要首先获取集合当中的迭代器,通过迭代器完成迭代操作
迭代的概念:Collection集合元素的通用获取方式。具体实现步骤:在每次取元素之前,先判断集合当中有没有元素,如果有就把这个元素取出来,继续判断还有没有,如果还有就再次取出来,直到把集合当中的所有元素都取出来。一般我们把这种取出方式在专业上称为迭代。
获取迭代器的方法
- public Iterator iterator(); 获取集合对应的迭代器,用来遍历集合当中的元素。
迭代器的使用步骤
1.通过集合的iterator()方法获取集合元素的迭代器实现类对象 使用Iterator接口进行接收
2.使用Iterator接口中定义的方法hasNext()判断集合中有没有下一个元素
3.使用Iterator接口当中的Next()方法取出集合当中下一个元素
Iterator接口当中的API方法
- public E next() 获取迭代的下一个元素
- public boolean hasNext() 如果集合当中仍有元素可以迭代,如果没有元素返回false,如果有就返回true。
迭代器的实现原理
在调用Iterator接口中的next方法之前,迭代器的索引位于第一个元素之前,不指向任何元素。当第一次调用迭代器的next方法时,迭代器的索引会向后移动一位,指向第一个元素并将该元素返回,当再次调用next方法时,迭代器的索引会指向第二个元素,并将该元素返回。以此类推,直到hasNext方法返回false,表示迭代器指向了集合的末尾。终止对元素的遍历、如果强硬再取元素,此时程序会抛出异常java.util.NoSuchElementException–无元素异常。
备注:Iterator接口也是有泛型的,迭代器的泛型是跟着集合走的,集合中的泛型定义的是什么类型,迭代器就是什么类型
练习:
//创建一个集合对象
Collection<String> coll=new ArrayList<>();
coll.add("英国");
coll.add("美国");
coll.add("中国");
coll.add("法国");
coll.add("日本");
//1. 使用集合当中的iterator方法获取迭代器实现类对象,使用接口接收
Iterator<String> iterator = coll.iterator();
//2.使用hasNext方法判断是否有下一个元素
boolean b1 = iterator.hasNext();
System.out.println(b1);
//3. 使用next方法取出集合当中下一个元素
String str01 = iterator.next();
System.out.println(str01);//英国
//使用while循环
//3步:1.获取跌代器2.判断有下一个元素3.取
Iterator<String> iterator1 = coll.iterator();
while (iterator.hasNext()){
String str = iterator.next();
System.out.println(str);
}
//true
//英国
//美国
//中国
//法国
//日本