Я хочу удалить все записи из LinkedHashMap, которые были добавлены после записи с заданным ключом.Как эффективно удалить записи из LinkedHashMap в Java?
Моя первая попытка была:
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