如何比较单个hashMap的值,而不使用其他集合

时间:2012-08-09 11:28:40

标签: java collections hashmap compare

m.put("A", al); 
m.put("B", al1);
m.put("C", al2);

我想比较这个HashMap的所有值。这是具有String类型键和ArrayList<Integer>类型值的HashMap。

我不想使用其他集合类型。


        Integer a[] = { 1, 2, 3, 4 };
        Integer b[] = { 1, 2, 3, 4 };
        Integer c[] = { 9, 5, 3, 7 };
        Integer d[] = { 1, 2, 3, 2};
        List<Integer> l = Arrays.asList(a);
        List<Integer> m = Arrays.asList(b);
        List<Integer> n = Arrays.asList(c);
        List<Integer> o = Arrays.asList(d);
        Map<String, List<Integer>> m1 = new HashMap<String, List<Integer>();
        m1.put("A", l);
        m1.put("B", m);
        m1.put("C", n);
        m1.put("D", o);

这是我的hashmap m1,每个键都有一个ElementList元素,因为我们知道键“A”和键“B”都有相同的元素             A- {1,2,3,4}和B- {1,2,3,4}以及其他其他键具有不同的不同元素。所以我想要的是,获得所有的钥匙             相同的元素。例如,键A和键B都具有相同的元素,因此我想打印A和B.并且所有键的大小应相同             所有hasmap键的大小都是4

2 个答案:

答案 0 :(得分:0)

如果你使用一个hashmap,你就没有办法让你有两个重复 - 如果你正确使用它,那就是。

例如,让我们使用你的例子。

HashMap<String, myClass> hash = new HashMap<String, myClass>();
myClass al = new myClass();
myClass al1 = new myClass();
myClass al2 = new myClass();

我们有两种方法可以从这里开始。一,是你在做什么。

hash.put("A", al);
hash.put("B", al1);
hash.put("C", al2);

看起来完美无瑕,但如果我现在这样做会怎么样?

hash.put("D", al);

这可以很好地工作,但这不是你应该如何使用它。正确使用散列映射的最基本方法如下:

hash.put(al.toString(), al);
hash.put(al1.toString(), al1);
hash.put(al2.toString(), al2);

即使您没有在类中重新定义toString()方法,您也会获得该特定实例的唯一标识符。 al.toString()al1.toString()不会返回相同的值,因为它取决于实例。

现在你也可以@Override方法让它返回你想要的任何字符串。

但是,无需搜索重复值。如果您正确使用了散列图,那么地图本身就会为您完成。

答案 1 :(得分:0)

    Map<String, ArrayList<Integer>> m= new HashMap<String, ArrayList<Integer>>();
    ArrayList<Integer> al = new ArrayList<Integer>();
    ArrayList<Integer> al1 = new ArrayList<Integer>();
    ArrayList<Integer> al2 = new ArrayList<Integer>();
    ArrayList<ArrayList<Integer>> all= new ArrayList<ArrayList<Integer>>();
    ArrayList<String> all1= new ArrayList<String>();
    al.add(1);al.add(2);al.add(3);al.add(4);al1.add(1);
    al1.add(2);al1.add(3);al2.add(1);
    al2.add(2);al2.add(3);al2.add(4);
    m.put("A", al);m.put("B", al1);m.put("C", al2);
    Map<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
    Map<String, ArrayList<Integer>> map1 = new HashMap<String, ArrayList<Integer>>();
    map.putAll(m);
    for(Entry<String, ArrayList<Integer>> entry : m.entrySet())
    {   
        for(Entry<String, ArrayList<Integer>> entry1 : map.entrySet())
        {
           if (!entry.getKey().equals(entry1.getKey())) 
           {
             if (entry.getValue().equals(entry1.getValue())) {

                 map1.put(entry1.getKey(), entry1.getValue());
            }
           }
           else {
               if (map1.isEmpty()) {
                       map1.put(entry.getKey(), entry.getValue());
                    }
                   else {
                       if (map1.containsValue(entry.getValue())) {
                       map1.put(entry.getKey(), entry.getValue());
                       }
                }
                }

        }
        }

我得到了解决方案..谢谢你们:)