我不知道如何最好地描述我的问题,但在这里,我正在尝试从中删除相同的名称(值) 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");
Run Code Online (Sandbox Code Playgroud)
我想使用 method 从中删除所有值为“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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在add()对方法HashSet会返回false一个值已被添加到组。上面的方法使用它来检测是否找到了重复项,然后HashMap使用remove()迭代器上的方法从 中删除重复项。
值得注意的是,根据Map您使用的实现,可能无法保证迭代顺序,因此也无法保证您删除的重复项。
如果您要使用 aTreeMap而不是 aHashMap您肯定会按字母顺序按键迭代地图,例如 Berlucio、Bracco、Carleone ...... Verdo。然后,您将始终保留斯特拉迪瓦里并移除维瓦尔第。