我不知道如何最好地描述我的问题,但在这里,我试图从 HashMap<String, String> map = new HashMap<String, String>();
中删除相同的名称(值)
例如,如果这张 map 包含像这样的名字
map.put("Vivaldi","Antonio");
map.put("Belucci", "Monica");
map.put("Gudini", "Harry");
map.put("Verdo", "Dhuzeppe");
map.put("Maracci", "Bruno");
map.put("Carleone", "Vito");
map.put("Bracco", "Luka");
map.put("Stradivari", "Antonio");
我想使用方法 removeTheFirstNameDuplicates
从中删除所有值为“Antonio”的条目,我在 Google 中查看了几天,所有示例都接近我想要的,但不是我真正需要的。
我的想法是,我需要一些东西来检查 map ,如果它包含相同的值,则删除重复项。但是我该怎么做呢?
最佳答案
您可以使用以下只遍历 map 一次的方法来完成:
private static void removeTheFirstNameDuplicates(final Map<String, String> map) {
final Iterator<Entry<String, String>> iter = map.entrySet().iterator();
final HashSet<String> valueSet = new HashSet<String>();
while (iter.hasNext()) {
final Entry<String, String> next = iter.next();
if (!valueSet.add(next.getValue())) {
iter.remove();
}
}
}
HashSet
上的 add()
方法将返回 false
如果已将值添加到集合中。上面的方法使用它来检测是否找到了重复项,然后使用迭代器上的 remove()
方法从 HashMap
中删除重复项。
值得注意的是,根据您使用的 Map
实现,可能无法保证迭代顺序,因此也无法保证您删除的重复项。
如果您要使用 TreeMap
而不是 HashMap
,您肯定会按键按字母顺序遍历 map ,例如Berluccio、Bracco、Carleone……Verdo。然后,您将始终保留 Stradivari 并删除 Vivaldi。
关于java - 如何从 HashMap 中删除重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22269271/