1 public static void main(String[] args) 2 { 3 List<String> list = new ArrayList<String>(); 4 5 list.add("yaoyuan"); 6 list.add("tiancai"); 7 8 Iterator it = list.iterator(); 9 String s = ""; 10 while(it.hasNext()){ 11 System.out.println("aaa"); 12 if(s == null){ 13 System.out.println("@@@"); 14 continue; 15 } 16 // System.out.println(it.next()); 17 if(((String)it.next()).equals("yaoyuan")){ 18 it.remove(); 19 20 } 21 } 22 for (String string : list) 23 { 24 System.out.println(string); 25 } 26 }
在以上代碼中,若臨時變量s為空的話,則會進入死循環。
這是由於沒有正確的理解continue的用法,continue會結束其后跟隨的語句而直接開始下一次的循環,在這里s為空,則直接進行下一次循環,沒有執行到it.next(),所有iterator的序列值沒有發生變化,hasNext永遠都是真,進入死循環。
另外,在對集合做遍歷操作的時候不允許有插入或者刪除操作,否則會拋異常。若要刪除可以使用iterator的remove方法,也可以在元素中做一個標記,循環結束后再做操作。