本人是初学者,最近研究了一下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个方法,
| |
| |
|
|
我就根据我的代码,研究了一下他们三个的用法。我参照了sun的doc。
1。Next()
这个方法很容易理解,就是返回Iterator里面的一个元素。不要被字面意思迷惑,认为是返回下一个,其实就是从第一个元素开始的。
2。hasNext()
这个方法,在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()方法可以返回值的时候,这个方法才是正确的。(我的个人观点)
3。remove()
我刚开始调用这个方法的时候,老是抛出异常,就是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的又一个初级记录,嘿嘿。