-1
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,每个键都有一个元素的 ArrayList,因为我们知道键“A”和键“B”都具有相同的元素 A-{1,2,3,4} 和 B-{1,2, 3,4} 和其他键的其余部分具有不同的元素。所以我想要的是,让所有的键都具有相同的元素。例如 Key A 和 Key B 都有相同的元素所以我想打印 A 和 B

4

2 回答 2

0

如果您使用哈希图,则不可能有两个重复项 - 如果您正确使用它,那就是。

例如,让我们使用您的示例。

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

这将完美地工作,但这不是你应该如何使用它。正确使用 hashmap 的最基本方法如下:

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

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

现在您也可以@Override使用该方法并让它返回您想要的任何字符串。

但是,无需搜索重复值。如果您正确使用哈希图,则地图本身会为您完成。

于 2012-08-09T11:41:44.977 回答
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());
                       }
                }
                }

        }
        }

我得到了解决方案..谢谢大家:)

于 2012-08-10T07:20:03.737 回答