java迭代器_java迭代器

为了从一个系列中生成连续的元素,我们可以使用java迭代器。这是对枚举界面的改进。迭代器代替了从jdk 1.2开始的枚举

这是一个很好的实用程序集合。每个集合都是独一无二的,并且想象如果我们必须在需要迭代的时候为每个集合写自己的逻辑。相反,java强制一个集合来传递一个迭代器。

这些漂亮的实用程序使java可爱,不是吗?

重要注意事项:

我们只能在一个方向迭代

迭代只能做一次。如果你完成了系列的完成。如果我们需要重新迭代,我们应该得到一个新的迭代器。

iterator.jpg

没有泛型的迭代器示例

packagecom.javapapers;importjava.util.ArrayList;importjava.util.Iterator;public classExampleIterator {public static voidmain(String args[]){

ArrayList animal= newArrayList();

animal.add("Horse");

animal.add("Lion");

animal.add("Tiger");

Iterator animalItr=animal.iterator();while(animalItr.hasNext()) {

String animalObj=(String)animalItr.next();

System.out.println(animalObj);

}

}

}

没有泛型,Iterator返回Object,我们需要对其进行类型转换。

使用泛型的迭代器示例

packagecom.javapapers;importjava.util.ArrayList;public classExampleIterator {public static voidmain(String args[]){

ArrayList animal= newArrayList();

animal.add("Horse");

animal.add("Lion");

animal.add("Tiger");for(String animalObj : animal) {

System.out.println(animalObj);

}

}

}

输出:

Horse

Lion

Tiger

看起来很简单由于我们正在使用各种泛型,所以没有明确地引用迭代器。

可迭代和迭代器

为了使对象可以迭代,它需要发出一个Iterator对象。要执行此合同,将使用Iterator接口。它包含一个名为iterator()的方法,它返回Iterator。因此,任何实现Iterable的类都将返回一个Iterator。

public interface Collection extends Iterable {

例如采取任何集合。集合是表示一系列元素的容器的接口。每个集合像ArrayList,Vector都实现了Collection等等迭代器。

Iterable的一个优点是,当您实现Iterable时,那些对象获得了以下支持:每个循环语法。

使用迭代器删除元素

迭代器有一个删除方法,我们可以从底层对象中删除元素。

它删除迭代器返回的最后一个元素。

迭代器和枚举接口之间的区别

在迭代器中引入了remove()方法。使用这种方法,我们可以从我们正在迭代的底层集合中删除元素。

枚举有两种方法,两种都可以在迭代器中使用。两者的方法名称缩短。

ListIterator是一个更好的迭代器,它包含更多的实用方法,如获取元素索引和向基础对象添加元素。使用ListIterator,我们可以在两个方向进行迭代。

ConcurrentModificationException的

看下面的代码,它会引发ConcurrentModificationException。当我们使用迭代器时,我们无法添加或移除元素到底层集合。

packagecom.javapapers;importjava.util.ArrayList;public classExampleIterator {public static voidmain(String args[]){

ArrayList animal= newArrayList();

animal.add("Horse");

animal.add("Lion");

animal.add("Tiger");for(String animalObj : animal) {

System.out.println(animalObj);

animal.add("Hyena");

}

}

}

Output:

Horse

Exception in thread"main"java.util.ConcurrentModificationException

at java.util.ArrayList$Itr.checkForComodification(Unknown Source)

at java.util.ArrayList$Itr.next(Unknown Source)

at com.javapapers.ExampleIterator.main(ExampleIterator.java:13)

实现我们自己的定制迭代器

我们将创建自己的自定义类,并使其实现Iterable,以便返回一个迭代器,我们可以使用它迭代元素。

packagecom.javapapers;importjava.util.ArrayList;importjava.util.Iterator;public class AnimalIterator implements Iterator{private ArrayList>animal;private intposition;publicAnimalIterator(Animal animalBase) {this.animal =animalBase.getAnimal();

}

@Overridepublic booleanhasNext() {if (position

return false;

}

@OverridepublicObject next() {

Object aniObj=animal.get(position);

position++;returnaniObj;

}

@Overridepublic voidremove() {

animal.remove(position);

}

}

packagecom.javapapers;importjava.util.ArrayList;importjava.util.Iterator;public class Animal implements Iterable{private ArrayList animal = new ArrayList();publicAnimal(ArrayList animal){this.animal =animal;

}publicArrayList getAnimal() {returnanimal;

}

@Overridepublic Iteratoriterator() {return new AnimalIterator(this);

}

}

packagecom.javapapers;importjava.util.ArrayList;public classTestIterator {public static voidmain(String args[]) {

ArrayList animalList = newArrayList();

animalList.add("Horse");

animalList.add("Lion");

animalList.add("Tiger");

Animal animal= newAnimal(animalList);for(String animalObj : animal) {

System.out.println(animalObj);

}

}

}

Output:

Horse

Lion

Tiger

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值