集合框架——Iterator迭代器

Collection集合元素的通用获取方式:在取元素之前先要判断集合中有没有元素,如果有,就把这个元素取出来,继续判断,如果还有就再取出来。一直把集合中的元素全部取出。这种取出方式专业术语称为迭代。

集合中把这种取元素的方式描述在Iterator接口中。Iterator接口的常用方法:

集合框架——Iterator迭代器_第1张图片

迭代器的代码实现:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo {
	public static void main(String[] args) {
		Collection coll = new ArrayList();
		coll.add("abc1");
		coll.add("abc2");
		coll.add("abc3");
		coll.add("abc4");
		//迭代器,对集合ArrayList中的元素进行取出
                Iterator it = coll.iterator();
                while(it.hasNext()){
		String s = it.next();		        
                System.out.println(s);
		}

迭代集合元素图解:

集合框架——Iterator迭代器_第2张图片

集合元素的向下转型

集合中可以存储任何对象,但是存放进去的数据提升成了Object。集合中存储其实都是对象的地址。基本类型包装类提供了自动装箱操作(基本类型->对象),这样,集合中的元素就是基本类型的包装类对象。存储时提升了Object,取出时要使用元素的特有内容,必须向下转型。

Collection coll = new ArrayList();
coll.add("abc");
coll.add("aabbc");
coll.add("abctest");
Iterator it = coll.iterator();
while (it.hasNext()){
//向下转型
 String str = (String)it.next();
    System.out.println(str.length());
}

注意:如果集合中存放的是多个对象,这时进行向下转型会发生类型转换异常。

Iterator接口也可以使用<>来控制迭代元素的类型

Collection coll = new ArrayList();
coll.add("abc");
coll.add("aabbc");
coll.add("abctest");
Iterator it = coll.iterator();
while (it.hasNext()){
    String str = it.next();
//当使用Iterator控制元素类型后,就不需要强转了。获取到的元素直接就是String类型
    System.out.println(str.length());
}

增强for循环    专门用来遍历数组和集合的,它的内部原理其实是个 Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作。

格式:for(元素的数据类型 变量 : Collection集合or数组){}

代码实现:

public class ForEachDemo {
	public static void main(String[] args) {
		function();
	}
	/*
	 *  实现for循环,遍历数组
	 *  好处: 代码少了,方便对容器遍历
	 *  弊端: 没有索引,不能操作容器里面的元素
	 */
	public static void function(){
		int[] arr = {3,1,9,0};
		for(int i : arr){
			System.out.println(i+1);
		}
		System.out.println(arr[0]);
	}
}

for对于对象数组遍历的时候,也是可以调用对象的方法的

public class ForEachDemo {
	public static void main(String[] args) {
		function_1();
	}
public static void function_1(){
		String[] str = {"abc","itcast","cn"};
		for(String s : str){
			System.out.println(s.length());
		}
	}
}

增强for循环遍历集合:

import java.util.ArrayList;
import demo.Person;   //已经写过的demo包中Person类
public class ForEachDemo {
	public static void main(String[] args) {
		function_2();
	}
	/*
	 *  增强for循环遍历集合
	 *  存储自定义Person类型
	 */
	public static void function_2(){
		ArrayList array = new ArrayList();
		array.add(new Person("a",20));
		array.add(new Person("b",10));
		for(Person p : array){
			System.out.println(p);
		}
	}


你可能感兴趣的:(Java,Iterator迭代器,增强for循环)