有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java有没有一种有效的方法来检查HashMap是否包含映射到相同值的键?

我基本上需要知道HashMap是否有映射到同一个值的不同键。我想知道除了检查每个键的值与地图中的所有其他值之外,是否还有其他方法

更新: 只是一些更多的信息,希望能澄清我想要实现的目标。考虑一个字符串“AZZA”。假设我在这个字符串上迭代,并将每个字符存储为一个键,它对应的值是另一个字符串。比如说,我最终找到了“a”的最后一个匹配项,该值已经出现在地图上了。如果与映射中已经存在的值对应的键也是“a”,则可以这样做。当“a”和“z”都映射到同一个值时,就会出现我的问题。仅当不同的键映射到相同的值时


共 (2) 个答案

  1. # 1 楼答案

    当然,编码和执行的最快速度是:

    boolean hasDupeValues = new HashSet<>(map.values()).size() != map.size();
    

    在O(n)时间内执行

    集合不允许重复,因此如果存在重复,集合将小于值列表

  2. # 2 楼答案

    您可以迭代这些键,并将当前值保存在集合中。 但是,在将该值插入集合之前,请检查集合是否已包含该值

    如果这是真的,则表示上一个键已经包含相同的值

    Map<Integer, String> map = new HashMap<>();
    Set<String> values = new HashSet<>();
    Set<Integter> keysWithSameValue = new HashSet<>();
    
    for(Integer key : map.keySet()) {
      if(values.contains(map.get(key))) {
        keysWithSameValue.add(key);
      }
      values.add(map.get(key));
    }