使用迭代器刪除元素
Iterator.remove()
方法是一個可選方法,它刪除上一次呼叫 Iterator.next()
返回的元素。例如,以下程式碼填充字串列表,然後刪除所有空字串。
List<String> names = new ArrayList<>();
names.add("name 1");
names.add("name 2");
names.add("");
names.add("name 3");
names.add("");
System.out.println("Old Size : " + names.size());
Iterator<String> it = names.iterator();
while (it.hasNext()) {
String el = it.next();
if (el.equals("")) {
it.remove();
}
}
System.out.println("New Size : " + names.size());
輸出:
Old Size : 5
New Size : 3
請注意,上面的程式碼是在迭代典型集合時刪除元素的安全方法。相反,如果你嘗試從集合中刪除元素,請執行以下操作:
for (String el: names) {
if (el.equals("")) {
names.remove(el); // WRONG!
}
}
一個典型的集合(如 ArrayList
)為迭代器提供了失敗的快速迭代器語義,它會丟擲一個 ConcurrentModificationException
。
remove()
方法只能在 next()
呼叫之後呼叫(一次)。如果在呼叫 next()
之前呼叫它,或者如果在 next()
呼叫之後呼叫它,則 remove()
呼叫將丟擲 IllegalStateException
。
remove
操作被描述為可選操作; 即並非所有迭代器都允許它。不支援它的示例包括不可變集合的迭代器,集合的只讀檢視或固定大小的集合。如果在迭代器不支援刪除時呼叫 remove()
,它將丟擲一個 UnsupportedOperationException
。