Java 集合學習之——Java 的Iterable介面的使用
阿新 • • 發佈:2018-11-21
參考:https://www.cnblogs.com/LittleHann/p/3690187.html
雖然知道Iterable介面可以用來遍歷集合類中的內容,但是具體操作時還是遇到下面的問題了,
你知道Iterable預設指標指的的第一個物件還是,指標變數呢?看完下面這個你或許就知道了
第一個例子程式碼:
package ids.autoview.tw.acconsys.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorTest { public static void main(String[] args){ List<String> l = new ArrayList<>(); for (int i=0;i<10;i++){ l.add(Integer.toString(i)); } Iterator<String> i = l.iterator(); if(i.hasNext()){ i.remove(); } for (String s : l) { System.out.println(s); } } }
執行後報如下錯誤
ids.autoview.tw.acconsys.test.IteratorTest
Exception in thread "main" java.lang.IllegalStateException
at java.util.ArrayList$Itr.remove(ArrayList.java:864)
at ids.autoview.tw.acconsys.test.IteratorTest.main(IteratorTest.java:17)
Process finished with exit code 1
第二個例子程式碼:
package ids.autoview.tw.acconsys.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorTest { public static void main(String[] args){ List<String> l = new ArrayList<>(); for (int i=0;i<10;i++){ l.add(Integer.toString(i)); } Iterator<String> i = l.iterator(); i.next(); if(i.hasNext()){ i.remove(); } for (String s : l) { System.out.println(s); } } }
執行結果:
1
2
3
4
5
6
7
8
9
Process finished with exit code 0
第一個例子和第二個例子最大的區別是,第二個例子在執行Iterator的remove方法之前,先執行了next的操作,next之前,指標指的是變數i本身,next之後才指的是第一個內容。