運行結果
說明上面例子中的for和while不能使用同壹個叠代器對象,因為叠代器已經返回了while循環中的最後壹個元素,而指針指向的下壹個元素為空,即hasNext()的返回值為false,這個叠代器的hasNext()不能作為for循環的判斷條件。
2到Object[]進行遍歷。
運行結果
3使用增強的for(foreach)來實現遍歷
運行結果
“註意。'
增強對於有壹個缺點。如果集合或數組為null,會報告NullPointerException,所以最好在調用enhanced for之前先做壹個判斷。通過反編譯,我們可以看到增強的for是通過叠代器的for循環實現的,它是叠代器的替代品。叠代器也有空指針異常的問題。
4描述
運行的結果是,set元素的內容保持不變。
*4.2並發修改異常
4.2.1叠代器和foreach(增強for)遍歷循環,集合對象本身不能調用方法改變集合內容,否則會報錯Java . util . concurrency . character ization異常(並修改異常)。
原因是叠代器和foreach都依賴於集合。如果集合發生變化,叠代器和增強for不知道,所以它們報告並行修改異常。
運行結果
解決方案
a使用壹個普通的for循環,其中的內容根據判斷集進行修改。
b使用叠代器修改集合的內容,叠代器接口中沒有,其子類ListIterator接口提供add()。
詳見:/p/94b 12 CCE 6 c 7(2,3.3)。
4.3如果在集合對象的叠代器循環中多次使用next(),則會出現Java . util . nosuchelementexception異常。
運行結果
4.4叠代器的remove()可以刪除next()返回的元素,這被認為是改變了集合的內容,不能用叠代中元素的值來解釋,留下了。
運行結果