如何从哈希映射中删除重复值

时间:2014-02-07 10:50:37

标签: java

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

    }

}

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

3 个答案:

答案 0 :(得分:2)

您的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);
        }
    }

}

答案 1 :(得分:2)

如果要删除重复值,则无法将映射与键保持一致,因为与重复值关联的唯一键也将从映射中删除。

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

试试这个:

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

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

答案 2 :(得分: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;
    }

}