【发布时间】:2016-07-25 15:46:25
【问题描述】:
我想从 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。
标签: java loops iterator iteration linkedhashmap