如何从HashMap中删除重复的值

Predict_it

我不知道如何最好地描述我的问题,但是在这里,我正在尝试从中删除相同的名称(值) 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");

我想通过使用method方法从其中删除所有值为“ Antonio”的条目removeTheFirstNameDuplicates,我在Google中搜索了几天,所有示例都接近于我想要的,但并不是我真正需要的。

我的想法是,我需要检查地图的内容,如果其中包含相同的值,则删除重复的内容。但是我该怎么办呢?

可怜的理查德

您可以使用以下方法进行此操作,该方法仅对地图进行一次迭代:

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();
        }
    }
}

add()对方法HashSet会返回false一个值已被添加到组。上面的方法使用此方法检测到已找到重复项,然后HashMap使用remove()迭代器上的方法从中删除重复项

值得注意的是,根据Map您使用实现方式,可能无法保证迭代顺序,因此也不能保证您删除了哪个重复项。

如果您使用aTreeMap而不是a HashMap,那么一定要按字母顺序对地图进行迭代,例如Berluccio,Bracco,Carleone…Verdo。然后,您将始终保留Stradivari并删除Vivaldi。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章