我想从LinkedHashMap中删除所有条目,这些条目是使用给定键值添加到条目之后的。如何高效地从Java中的LinkedHashMap中删除条目?
我的第一个尝试是:
LinkedHashMap<String, SomeObject> var = new LinkedHashMap<String, SomeObject>();
public void removeEntriesAfter(String key) {
boolean deleteEntries = false;
for (String currentKey : var.keySet()) {
if(deleteEntries) {
var.remove(currentKey);
} else {
if(key.equalsIgnoreCase(currentKey)) {
// Do not remove the current entry
deleteEntries = true;
}
}
}
}
但后来我收到了java.util.ConcurrentModificationException
。
我的第二个想法是首先确定键,然后将其删除。
public void removeEntriesAfter(String key) {
boolean deleteEntries = false;
List<String> listOfEntriesToBeRemoved = new ArrayList<String>();
// Determine entries to be deleted
for (String currentKey : var.keySet()) {
if(deleteEntries) {
listOfEntriesToBeRemoved.add(currentKey);
} else {
if(key.equalsIgnoreCase(currentKey)) {
// Do not remove the current entry
deleteEntries = true;
}
}
}
// Removed selected entries
for (String currentKey : listOfEntriesToBeRemoved) {
var.remove(currentKey);
}
}
这很有效,但我确信有一个更优雅/高效的方式来做到这一点。
通过'm.keySet()。iterator()'获取键迭代器。调用'next()'直到你到达'key'。之后调用'remove()'/ next()'直到'hasNext()'返回false。 – aioobe