当前位置: 首页 > 知识库问答 >
问题:

Java - 如何从HashMap中删除重复的条目?

帅锦
2023-03-14

我在Java中有一个< code>HashMap:

HashMap<String, Integer> meh = new HashMap<String, Integer>();`

meh.put("one", 1);
meh.put("one", 1);
meh.put("one", 1);
meh.put("two", 1);
meh.put("two", 2);
meh.put("three", 3);

我需要的是删除重复条目(“1”,1)[当键和值都重复时]。我搜索并只找到了“如何删除重复的键/值”。有人能帮忙吗?

共有3个答案

吕琪
2023-03-14

根据您的描述,Map

更好的数据结构可能是使用< code>MyPair的< code >集合,其中< code>MyPair是:

public class MyPair {
    private String first;
    private int second;
    // + constructor, getters + setters, hashcode + equals
}

然后,您可以在< code>HashSet中使用< code>MyPair对象:

Set<MyPair> myPairs = new HashSet();
myPairs.add(new MyPair("one", 1));
myPairs.add(new MyPair("one", 2));
myPairs.add(new MyPair("two", 2));    
myPairs.add(new MyPair("two", 2));
myPairs.remove(new MyPair("one", 2)); // remove MyPair("one", 2) only
苏翰学
2023-03-14

您无法从<code>HashMap中首先没有重复项。第二次(或第三次,或任何其他)调用<code>put</code>时,如果键已经存在于映射中,它将简单地用一个新值覆盖该值,而不管它是否是先前存在的值的副本。

在您提供的代码段中,映射将只有三个值。

颜经艺
2023-03-14

没有必要这样做,HashMap会自动完成这项工作。当您执行该代码时,会发生如下情况:

meh.put("one", 1);

这使得地图{“一”—

meh.put("one", 1);

这本身替换了赋值,使地图{“one”-

meh.put("one", 1);

这本身替换了赋值,使地图{“one”-

meh.put("two", 1);

这将添加所请求的链接,使地图{“一个”—

meh.put("two", 2);

这取代了“二”的赋值,使地图{“一”—

meh.put("three", 3);

这将添加新元素,使总映射{“1”-

 类似资料:
  • 我有一个具有重复值的地图: 我想在地图上有 你知道如何去掉重复的值吗? 目前,我收到'java.util.ConcurrentModificationException'错误。 谢谢。

  • 问题内容: 我必须向现有表添加唯一约束。很好,除了表已经有数百万行,而且许多行违反了我需要添加的唯一约束。 删除有问题的行的最快方法是什么?我有一条SQL语句,该语句查找重复项并将其删除,但要花很长时间才能运行。有没有其他方法可以解决此问题?也许备份表,然后在添加约束后还原表? 问题答案: 其中一些方法似乎有些复杂,我通常这样做是: 给定table table,要在()上对其进行唯一化,使行保持为

  • 我有一个arraylist,它包含一对整数(例如int i,int j)。但它可能包含重复对(如(int i,int j)和(int j,int i))。现在如何在O(n)时间复杂度中去除重复。

  • 问题内容: 我有一个,并且我想从中删除重复的字符串。我怎样才能做到这一点? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加回中: 当然,这破坏了中元素的顺序。

  • 问题内容: 我想从列表中删除重复项,但我无法正常工作: 问题答案: 如果该代码不起作用,则可能是你未在该类上正确实现。 大概有一些钥匙(我们称之为)可以唯一地标识一个客户。例如 的适当定义equals(Object)如下所示: 为了完整起见,你还应该实现hashCode两个Customer相等的对象将返回相同的哈希值。hashCode上述定义的匹配项为equals: 还值得注意的是,如果列表很大,

  • 问题内容: 我想从下表中删除多个重复的键: 希望它像 我正在使用mysql。这是可能的吗?我不能使用 查询来进行唯一的输入,因为我希望将这些重复的输入输入到表中。 问题答案: 一种方法是使用将表联接到子查询上。子查询得到最低为每。当记录在子查询上不匹配时,仅表示它没有匹配的记录并且可以安全地删除。 SQLFiddle演示 但是,如果的记录可以具有不同的名称,则您需要在子句中包括它们,否则将仅保留最