java--集合的迭代器

在使用迭代器遍历一个集合的时候,我们需要掌握一下的一些知识:


Iterator iterator():迭代器,集合的专用遍历方式
Object next():获取元素,并移动到下一个位置。
NoSuchElementException:没有这样的元素,因为你已经找到最后了。
boolean hasNext():如果仍有元素可以迭代,则返回 true。

需要注意的是他们的输入赋值方式。

导入的包为:

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

我要讲的是一个

package shike;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class hahha {
	public static void main(String[] args){
		Collection c= new ArrayList();
		c.add("kaishi");
		c.add("fendou");
		c.add("weile");
		c.add("meixiang");
		
		Iterator it= c.iterator();//c的迭代器为it
		Object obj=it.next(); //it读入数据
		while(it.hasNext()){ //迭代器操作
			String s=(String)it.next();//向下转型
			System.out.println(s);
		}	
	}
}

这样的输出为:


第一个没有输入,找到原因:Object obj=it.next(); //it读入数据

那么我们注释掉这行以后,就可以得到完整的输出:



我们也可以看看迭代器的使用图解:


迭代器的源码:

public interface Inteator {
	boolean hasNext();
	Object next(); 
}

public interface Iterable {
    Iterator iterator();
}

public interface Collection extends Iterable {
	Iterator iterator();
}

public interface List extends Collection {
	Iterator iterator();
}

public class ArrayList implements List {
	public Iterator iterator() {
        return new Itr();
    }
    
    private class Itr implements Iterator {
    	public boolean hasNext() {}
		public Object next(){} 
    }
}


Collection c = new ArrayList();
c.add("hello");
c.add("world");
c.add("java");
Iterator it = c.iterator();	 //new Itr();
while(it.hasNext()) {
	String s = (String)it.next();
	System.out.println(s);
}

集合的继承体系如下:


ArrayList存储字符串并遍历
 * 
 * 我们按照正常的写法来写这个程序, 结果确出错了。
 * 为什么呢?
 * 因为我们开始存储的时候,存储了String和Integer两种类型的数据。
 * 而在遍历的时候,我们把它们都当作String类型处理的,做了转换,所以就报错了。
 * 但是呢,它在编译期间却没有告诉我们。
 * 所以,我就觉得这个设计的不好。
 * 回想一下,我们的数组
 * String[] strArray = new String[3];
 * strArray[0] = "hello";
 * strArray[1] = "world";
 * strArray[2] = 10;
 * 集合也模仿着数组的这种做法,在创建对象的时候明确元素的数据类型。这样就不会在有问题了。
 * 而这种技术被称为:泛型。
 * 
 * 泛型:是一种把类型明确的工作推迟到创建对象或者调用方法的时候才去明确的特殊的类型。参数化类型,把类型当作参数一样的传递。
 * 格式:
 * <数据类型>
 * 此处的数据类型只能是引用类型。
 * 好处:
 * A:把运行时期的问题提前到了编译期间
 * B:避免了强制类型转换
 * C:优化了程序设计,解决了黄色警告线
 */

public class GenericDemo {
	public static void main(String[] args) {
		// 创建
		ArrayList<String> array = new ArrayList<String>();


		// 添加元素
		array.add("hello");
		array.add("world");
		array.add("java");
		// array.add(new Integer(100));
		//array.add(10); // JDK5以后的自动装箱
		// 等价于:array.add(Integer.valueOf(10));


		// 遍历
		Iterator<String> it = array.iterator();
		while (it.hasNext()) {
			// ClassCastException
			// String s = (String) it.next();
			String s = it.next();
			System.out.println(s);
		}


		// 看下面这个代码
		// String[] strArray = new String[3];
		// strArray[0] = "hello";
		// strArray[1] = "world";
		// strArray[2] = 10;
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值