2012-08-09 48 views
-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}以及其他Keys的其他鍵具有不同的元素。所以我想要的是,讓所有的鍵都有相同的元素。例如鍵A和鍵B都具有相同的元素,所以我想要打印A和B.並且所有鍵的大小應該相同 這裏所有的hasmap鍵的大小都是4

+0

你要到HashMap中的值與究竟是什麼比較?你能詳細說明你的要求嗎? – 2012-08-09 11:30:40

+0

想要比較所有的值...我想從這個hashMap中提取所有重複的值。 等人的所有值進行比較,以AL 1和AL等,比較將所有元素中來實現。我需要所有重複值與它的密鑰 – 2012-08-09 11:33:59

回答

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方法,讓它返回你想要它的任何字符串。

但是沒有必要尋找重複的值。如果你正確使用hashmap,地圖本身會爲你做。

+0

取決於您使用HashMap的。如果你使用它來快速訪問,那麼你是對的。如果你用它來「映射」某些鍵爲特定值(例如姓名的電話號碼),然後'hash.put(「d」,人);'是完全沒問題... – brimborium 2012-08-09 11:50:24

+0

這不只是快速訪問。密鑰也可以用來避免重複,這是OP想要做的。 – 2012-08-09 11:52:09

+0

他從未說過他想避免重複。他只是想找到他們。如果唯一的原因是爲了避免重複,你應該HashSet而不是HashMap ... – brimborium 2012-08-09 11:57:05

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

     } 
     } 

我得到了這個..解決謝謝你們:)