Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hasnext()在java集合中的工作原理_Java_List_Class_Collections_Package - Fatal编程技术网

hasnext()在java集合中的工作原理

hasnext()在java集合中的工作原理,java,list,class,collections,package,Java,List,Class,Collections,Package,节目: public class SortedSet1 { public static void main(String[] args) { List ac= new ArrayList(); c.add(ac); ac.add(0,"hai"); ac.add(1,"hw"); ac.add(2,"ai"); ac.add(3,"hi"); ac.add("hai"); Collections.sort(ac)

节目:

public class SortedSet1 {

  public static void main(String[] args) {  

    List ac= new ArrayList();

    c.add(ac);
    ac.add(0,"hai");
    ac.add(1,"hw");
    ac.add(2,"ai"); 
    ac.add(3,"hi"); 
    ac.add("hai");

    Collections.sort(ac);

    Iterator it=ac.iterator();

    k=0;

    while(it.hasNext()) {    
      System.out.println(""+ac.get(k));
      k++;     
    }
  }
}
输出: 人工智能 海 你好 硬件 海

它如何执行5次??
而来海没有下一个元素出现这样的情况是假的。但是它是如何执行的。

上面的循环使用索引在列表中迭代
it.hasNext()
返回true,直到
it
到达列表末尾。由于没有在循环中调用
it.next()
来推进迭代器,
it.hasNext()
不断返回true,循环继续运行。直到,也就是说,
k
变为5,此时抛出
IndexOutOfBoundsException
,退出循环

使用迭代器的正确习惯用法是

while(it.hasNext()){
    System.out.println(it.next());
}
或者使用索引

for(int k=0; k<ac.size(); k++) {
  System.out.println(ac.get(k));
}

for(int k=0;k这一点是ac.get(k)不会消耗迭代器中与其相反的任何元素。next()

该循环将永远不会终止。it.hasNext不会推进迭代器。您必须调用它。next()循环可能会终止,因为k变为5,此时Arraylist抛出一个边界异常

迭代列表(包含字符串)的正确形式为:

Iterator it = ac.iterator();
while (it.hasNext) {
  System.out.println((String) it.next());
}
或者如果列表已键入,例如ArrayList

for (String s : ac) {
  System.out.println((String) s);
}
或者,如果您完全知道这是一个数组列表,并且需要速度而不是简洁:

for (int i = 0; i < ac.size(); i++) {
  System.out.println(ac.get(i));
}
for(int i=0;i
真正的问题是,如何使用迭代器以及为什么会出现indexOutOfBounds异常。
for (int i = 0; i < ac.size(); i++) {
  System.out.println(ac.get(i));
}