package com.shujia.day12;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
/*
Collection集合如何遍历?
学习集合的4个步骤:
1、如何创建集合对象?
2、如何创建元素对象?
3、如何将元素对象添加到集合中?
4、如何遍历集合?
调用Collection接口中的iterator()方法获取集合对应的迭代器对象
Iterator类中有方法可以给我们使用获取元素对象
Iterator接口中提供了一个方法hasNext(),帮助我们判断下一个位置上是否有元素
next方法有返回值是Object类型的,该方法就是获取元素的方法
*/
public class CollectionDemo3 {
public static void main(String[] args) {
//创建一个集合对象
Collection c1 = new ArrayList();
//添加元素
c1.add("hello");
c1.add("java");
c1.add("world");
c1.add("hello");
c1.add("hadoop");
//遍历集合
//方式1:Object[] toArray() 把集合转成数组,可以实现集合的遍历
// Object[] arr1 = c1.toArray(); //将集合转为Object类型的数组
// for (int i = 0; i < arr1.length; i++) {
// Object o = arr1[i]; // Object o = "hello" 相当于多态
// String s = (String)o;//向下转型目的是调用String类型的length()方法
// System.out.println(s + ", " + s.length());
// }
//方式2:Iterator iterator() 迭代器遍历,Collection集合的专用遍历方式,迭代器遍历的时候,无法使用集合的方法对集合本身做改动。
//通过集合添加会使原集合的版本号发生改变,从而和迭代器的版本号不一样,抛出异常。
//List中特有的迭代器中的add方法,不仅可以对迭代器中元素进行添加,底层也针对原集合进行添加元素
//将原集合以及迭代器的版本号也设置成一样的了,所以将来再检查版本号的时候,原集合和迭代器的版本号是一致的
//这样就不会产生并发修改异常了
//调用Collection接口中的iterator()方法获取集合对应的迭代器Iterator的对象iterator
//迭代器对象中存储了集合中每一个元素,Iterator类中有方法可以给我们使用获取元素对象
Iterator iterator = c1.iterator(); //Iterator iterator = new Itr()
//通过观察源码发现,Itr类中只有next方法有返回值是Object类型的,该方法就是获取元素的方法
// Object o = iterator.next(); //Object o = "hello" 迭代器调用next方法获取元素
// System.out.println(o);
// Object o1 = iterator.next();
// System.out.println(o1);
// Object o2 = iterator.next();
// System.out.println(o2);
// Object o3 = iterator.next();
// System.out.println(o3);
// Object o4 = iterator.next();
// System.out.println(o4);
// Object o5 = iterator.next();
// System.out.println(o5);
//我们应该在next方法调用之前,先看一看迭代器中下一个位置上是否有元素,若有元素,才进行调用
//Iterator接口中提供了一个方法hasNext(),帮助我们判断下一个位置上是否有元素
while (iterator.hasNext()){
Object o = iterator.next();
System.out.println(o);
}
System.out.println("=====================]");
while (iterator.hasNext()){
Object o = iterator.next();
System.out.println(o);
}
}
}