迭代器Iterator接口

来源:互联网 发布:linux mysql 源码安装 编辑:程序博客网 时间:2024/06/08 12:20

集合框架中遍历list是比较方便的,我们只需有一个for循环即可遍历list中的所有元素,因为list是有序的,而set是无序的,那么如何遍历set集合呢?就需要用到Iterator对象了,Iterator对象称作迭代器,来实现对容器内元素的遍历。


Iterator接口包含三个方法,hasNext(),next(),remove() 下面解释来自API JDK1.6





集合Collection实现了Iterator接口

public interface Collection<E> extends Iterable<E>

所有实现了Collection接口的容器类都有一个iterator方法用来返回一个实现Iterator接口的对象

set集合中使用迭代器遍历元素

//new一个新set集合Set set=new HashSet();//往集合中添加元素set.add("123");set.add("qaz");set.add("wsx");//通过迭代器遍历集合for(Iterator iter=set.iterator();iter.hasNext();){String str=(String)iter.next();System.out.println(str);}



输出结果就是,123 qaz wsx


当然list也可以用迭代器遍历

//new一个新list集合List list=new ArrayList();//往集合中添加元素list.add("123");list.add("qaz");list.add("wsx");//通过for循环遍历for(int i=0;i<list.size;i++){System.out.println(list.get(i));}//通过迭代器遍历集合for(Iterator iter=list.iterator();iter.hasNext();){String str=(String)iter.next();System.out.println(str);//输出同上}



在Map中使用迭代器遍历也是一样的道理,代码也基本同上。




------------------------------------------------------------后续--------------------------------------------------------------


remove方法:我们都知道remove方法是需要在next方法之后使用的,并且只能使用一次,如果你连续使用两次此方法是会报错的,因为第一次使用的时候元素已经被删除了,第二次再删就已经没有东西可删了,就会报错。该方法会移除迭代器返回的最后一个元素,代码示例:


//new一个新set集合Set set=new HashSet();//往集合中添加元素set.add("123");set.add("qaz");set.add("wsx");//通过迭代器遍历集合for(Iterator iter=set.iterator();iter.hasNext();){String str=(String)iter.next();if(str.equals("qaz")){iter.remove();}}for(Iterator iter=set.iterator();iter.hasNext();){String str=(String)iter.next();System.out.println(str);}



输出结果为:123,wsx

如果我们不使用remove方法,而是直接更改集合元素的值,比如 str="qqq";

即使这样,集合中的元素也不会改变的,在传递参数的时候,有值传参和引用传参,前者是直接把元素的值传过来,而后者是把地址传过来,在引用传参的时候才会相应的改变元素的值,而我们这里的迭代器是值传参,所以不会改变。







0 0