有关Iterator的一点看法

  本人是初学者,最近研究了一下Iterator,有了一点心得,就写下来,供以后参考。

下面是我写的一个简单的类,用来研究Iterator用法的。(顺便也研究了一下ArrayList,这里我只是说一下Iterator

 

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
class Test4{
    public static void main(String args[]){
        char []c={'A','B'};
        String []A={"aaa","bbb"};
        ArrayList list=new ArrayList();
        list.add(c);
        list.add(A);

  Iterator m=list.iterator();
   char [] temp=(char [])m.next();      //question1
if(m.hasNext())

   // m.remove();
//char [] temp = (char [])list.get(0);
// char [] temp=(char [])m.next();
 m.remove();
 String []temp2=(String [])m.next();
  System.out.println(temp2[0]);
   System.out.println(temp);

}//end main
}//end class

 

  首先,我声明了一个char 和一个String,并且把这两个对象放进了ArrayList的对象里面,大家都知道,在Iterator这个接口里面,有3个方法,

hasNext()
          Returns
true if the iteration has more elements.

 E

next()
          Returns the next element in the iteration.

 void

remove()
          Removes from the underlying collection the last element returned by the iterator (optional operation).

我就根据我的代码,研究了一下他们三个的用法。我参照了sundoc

1Next()

这个方法很容易理解,就是返回Iterator里面的一个元素。不要被字面意思迷惑,认为是返回下一个,其实就是从第一个元素开始的。

2hasNext()

这个方法,在sun的文档中,Returns true if the iteration has more elements. (In other words, returns true if next would return an element rather than throwing an exception.) 对于这句话,我刚开始的理解是只要这里面有多个元素,就应该是返回为true,这个理解是没错的,但是我发现一个问题,在上面代码中,我标注了//question1,这句代码原来是放在if(m.hasNext())的下面,结果发现会报错,我仔细阅读了一下文档,觉得应该理解为只有在next()方法可以返回值的时候,这个方法才是正确的。(我的个人观点)

3remove()

我刚开始调用这个方法的时候,老是抛出异常,就是IllegalStateException我查了一下文档,发现这个异常是非法调用产生的,我又仔细去看了一下文档,还是没看出原因,既然里面有元素,为什么不能调用这个方法呢,我打开util这个包,看了一下Iterator的原代码,终于明白了,在程序里面,有一条注释

@exception IllegalStateException if the <tt>next</tt> method has not

     *                           yet been called, or the <tt>remove</tt> method has already

     *                           been called after the last call to the <tt>next</tt>

·                                     method.

意思是说必须要在调用之前调用next()方法才是正确的,由于文档中没有像原程序中使用这种<tt>next</tt>标志,所以当时我也没看出来(汗颜)。不过要注意,在调用这个方法以后,就会把上面的元素给去掉了,在我的程序中,就剩下String []了,char就被去掉了。

好了,我的心得就这么多,自己摸索的。我学JAVA的又一个初级记录,嘿嘿。

 

阅读更多
个人分类: Java杂谈
上一篇如何把页面的数据传到后台
下一篇有关JMS的一点看法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭