【问题标题】:how to remove duplicate value from hash map [closed]如何从哈希映射中删除重复值[关闭]
【发布时间】:2014-02-07 10:50:37
【问题描述】:
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class MyClass {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        HashMap<Integer, String> hm = new HashMap<Integer, String>();
        hm.put(1, "Anil");
        hm.put(2, "Deven");
        hm.put(3, "sanjay");
        hm.put(4, "sanjay");
        hm.put(5, "Raj");
        hm.put(6, "sanjay");

        Set<Integer> keys = hm.keySet();

    }

}

这是我的代码,我想从哈希映射中删除所有重复值并希望在控制台上打印,请告诉我我将如何做到这一点。

【问题讨论】:

  • 您如何决定哪些密钥对需要保留,哪些需要作为副本删除?
  • 看到我刚刚通过 Arraylist 中的 Goodle 我能够删除重复但我只想了解如何从 hasmap 中删除?
  • 您可以在这里找到解决方案:[在 Java Map 中查找重复值?][1] [1]:stackoverflow.com/questions/6895192/…

标签: java


【解决方案1】:

您的 HashMap 是 hm。将hm 的值放入另一个HashMap hm2 中,其中hm 的值是hm2 的键,hm2 的值可以是任何值(例如对象 Boolean.TRUE)。

然后遍历第二个 HashMap hm2 并打印出它的键。

除了HashMap,您还可以使用HashSet 代替hm2(这样更好,因为您不需要 Boolean.TRUE 部分)。

import java.util.HashMap;
import java.util.HashSet;

public class MyClass {

    public static void main(String[] args) {

        HashMap<Integer, String> hm = new HashMap<Integer, String>();
        hm.put(1, "Anil");
        hm.put(2, "Deven");
        hm.put(3, "sanjay");
        hm.put(4, "sanjay");
        hm.put(5, "Raj");
        hm.put(6, "sanjay");

        HashSet<String> hm2 = new HashSet<String>();
        hm2.addAll(hm.values());

        for (String str : hm2){
            System.out.println(str);
        }
    }

}

【讨论】:

    【解决方案2】:

    翻转地图两次

    import java.util.HashMap;
    import java.util.Map;
    import java.util.Map.Entry;
    
    public class UniqueMapValues
    {
        public static void main(String[] args)
        {
            Map<Integer, String> hm = new HashMap<Integer, String>();
            hm.put(1, "Anil");
            hm.put(2, "Deven");
            hm.put(3, "sanjay");
            hm.put(4, "sanjay");
            hm.put(5, "Raj");
            hm.put(6, "sanjay");
    
            hm = invert(invert(hm));
    
            System.out.println(hm);
        }
    
        private static <K, V> Map<V, K> invert(Map<K, V> map)
        {
            Map<V, K> result = new HashMap<V, K>();
            for (Entry<K, V> entry : map.entrySet())
            {
                result.put(entry.getValue(), entry.getKey());
            }
            return result;
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      如果您希望消除重复值,则无法将映射与键一起保留,因为与重复值关联的唯一键也会从映射中删除。

      如果您只需要地图中唯一值的列表,请尝试以下操作:

      试试这个:

          Set<String> set = new HashSet<String>(hm.values());
          System.out.println(set);
      

      输出:[Anil,Deven,Raj,sanjay]

      【讨论】:

        猜你喜欢
        • 2023-04-09
        • 2018-04-14
        • 2015-04-25
        • 2011-04-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-05
        相关资源
        最近更新 更多