关于java中的Iterator:

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java中的Iterator:相关的知识,希望对你有一定的参考价值。

如果有一个容器Collection,我用它得到一个Iterator t1,Collection中的元素长度没有变动,即没有添加和删除,移动元素操作(但是元素对象内部的值是可以变动的),然后我又用这个Collection生成一个Iterator t2,那么 t1和t2为什么不设计成单例模式,即t1.equals(t2)?他们遍历的不是一样吗,t1和t2有什么不同?如果我想实现:
while(true)
Iterator t = collection.iterator();
//遍历,可能对collection中的元素进行增加或者删除

这样会生成很多Iterator对象,怎样优化?
求详细解答!

参考技术A 因为开发人员无法确定你的集合的长度会不会更改,所以外全的考虑就是每次都生成一个新的实例:
public Iterator<E> iterator()
return new Itr();

因为迭代器用于循环遍历,他只针对创建时集合的元素个数,即使你增加或删除都是对当前遍历器无影响的

所以建议你使用for循环遍历增加修改,而不是迭代器本回答被提问者采纳
参考技术B while(true)
Iterator t = collection.iterator();
//遍历,可能对collection中的元素进行增加或者删除

你的这个循环肯定是死循环,而起collection没有放在while循环里面,肯定是生成无数一样的iterator。首先while里面的collection要是一个新生成的对象,才能进行生成Iterator 操作。追问

这个我知道,这个只是简化的伪代码,collection不会是空对象,while(true)可以理解成很多的循环

参考技术C Iterator t =null;
while(true)
t = collection.iterator();

这样永远调用的都是这个Iterator ;

关于ArrayList中的iterator返回的事迭代器实例问题。

Arraylist是一个具体的类,它并没有定义它自己的iterator()方法,,它只是从AbstractList 这个抽象类中继承了iterator()这个方法,而AbstractList 中的iterator()方法的定义是    public Iterator<E> iterator() 
它的源代码是  

 public Iterator<E> iterator() {
         return new Itr();
          }
其中,Itr为AbstractList 这个抽象类中定义的 内部类,,它的定义为::
 private class Itr implements Iterator<E>{...............}
那么List cats = new ArrayList( );
        Iterator e = cats.iterator( );
则这个cats.iterator()生成的应该是Itr这个实现了Iterator接口的内部类的对象,,
因为父类的引用能够指向任何它的子类的对象,,所以上面那样写完全正确

以上是关于关于java中的Iterator:的主要内容,如果未能解决你的问题,请参考以下文章

关于Enumeration和Iterator的区别.

关于java iterator的next()的用法

求助……关于iterator

关于Java的Map

关于java List List[]

JAVA中Iterator的具体作用?