我不知道如何最好地描述我的问题,但就是这样,我试图从中删除相同的名称(值)HashMap<String, String> map = new HashMap<String, String>();
例如,如果此地图包含类似的名称
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");
我想使用方法从中删除所有值为“Antonio”的条目removeTheFirstNameDuplicates
,我在谷歌上查了几天,所有的例子都接近我想要的,但不是我真正需要的。
我的想法是,我需要一些东西来检查地图,如果它包含相同的值,则删除重复的值。但我该怎么做呢?
您可以使用以下方法来完成此操作,该方法仅迭代地图一次:
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();
}
}
}
The add()
方法上HashSet
将返回false
如果值已添加到集合中。上面的方法使用它来检测是否已找到重复项,然后从HashMap
通过使用remove()
迭代器上的方法。
值得注意的是,根据Map
您使用的实现,可能无法保证迭代顺序,因此也无法保证您删除的重复项。
如果你要使用TreeMap
而不是一个HashMap
您一定会按键按字母顺序迭代地图,例如贝卢乔、布拉科、卡里昂……维多。然后你就会一直保留斯特拉迪瓦里并删除维瓦尔第。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)