我正在学习HashMap,并希望得到一些有关删除值(在本例中为地点)的帮助。我有3个HashMaps(perName,perCategory,perPosition),其中2个具有地点列表作为值,所有键都是字符串/位置。因此,可能会有相同名称或类别的不同地点。我想根据该地点是否“标记”来从每个HashMap的值列表中删除特定地点。
每个添加的地点都存储在所有HashMaps中,标记的地点存储在单独的ArrayList中。我试图遍历ArrayList并从每个HashMap中删除其每个地点/值。我不想删除键,因为可能有其他未标记的地点具有相同的键。这可能吗?目前当我尝试删除它们时,这些地点似乎不会消失。
我尝试了不同的方法,迭代器的方法(可能不必要)似乎会删除整个键,而使用for循环的方法则根本不会删除任何内容。如果我的信息不足以解决这个问题,请告诉我。谢谢。
每个添加的地点都存储在所有HashMaps中,标记的地点存储在单独的ArrayList中。我试图遍历ArrayList并从每个HashMap中删除其每个地点/值。我不想删除键,因为可能有其他未标记的地点具有相同的键。这可能吗?目前当我尝试删除它们时,这些地点似乎不会消失。
我尝试了不同的方法,迭代器的方法(可能不必要)似乎会删除整个键,而使用for循环的方法则根本不会删除任何内容。如果我的信息不足以解决这个问题,请告诉我。谢谢。
private Map<Position, Place> perPosition = new HashMap<>();
private Map<String, List<Place>> perCategory = new HashMap<>();
private Map<String, List<Place>> perName = new HashMap<>()
//method 1
Iterator<Place> it = markedPlace.iterator();
while (it.hasNext()) {
Place p = it.next();
perPosition.remove(p.getPosition());
perName.remove(p.getName());
perCategory.remove(p.getCategory());
p.setMarked(false);
p.setVisible(false);
it.remove();
}
//method 2
for (Place p : markedPlace) {
for (Map.Entry<String, List<Place>> entry : perName.entrySet()) {
if (entry.getValue().equals(p)) {
perName.remove(entry.getValue());
}
}
for (Map.Entry<String, List<Place>> entry : perCategory.entrySet()) {
if (entry.getValue().equals(p)) {
perCategory.remove(entry.getValue());
}
}
for (Map.Entry<Position, Place> entry : perPosition.entrySet()) {
if (entry.getValue().equals(p)) {
perName.remove(entry.getKey());
}
}
markedPlace.clear();