在Java 中迭代期間安全刪除元素
問:是否允許在使用foreach 循環迭代集合時從集合中刪除元素在Java中?
A: 使用 foreach 迴圈進行刪除不是建議。 它可能會導致意外行為,因為底層迭代器未公開且無法直接存取以進行修改。
範例:
List<String> names = .... for (String name : names) { // Do something names.remove(name). }
此程式碼可能會因 java.util 而失敗.ConcurrentModificationException,因為在 foreach 迴圈進行時,刪除操作會修改下面的集合。
問:我們可以刪除尚未刪除的項目嗎?已經被迭代了嗎?
答:否。 刪除循環中尚未處理的元素可能會導致「索引越界」錯誤。範例:
//Assume that the names list as duplicate entries List<String> names = .... for (String name : names) { // Do something while (names.remove(name)); }
要在迭代時安全地刪除元素,應使用迭代器:
List<String> names = .... Iterator<String> i = names.iterator(); while (i.hasNext()) { String s = i.next(); // must be called before you can call i.remove() // Do something i.remove(); }
Java 文件強調,iterator 和listIterator 方法傳回的迭代器是「fail-快速地。
以上是如何在迭代時安全地從 Java 集合中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!