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

このHashMapのすべての値を比較したいと思います。これは、StringタイプキーとArrayList<Integer>タイプ値を持つHas​​hMapです。

他の種類のコレクションは使いたくない。


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

これは私のハッシュマップm1であり、キー「A」とキー「B」の両方が同じ要素A-{1,2,3,4}とB-{1,2、 3,4}およびその他のキーには、異なる要素があります。だから私が欲しいのは、同じ要素を持つすべてのキーを取得することです。たとえば、キーAとキーBは両方とも同じ要素を持っているので、AとBを印刷したいと思います。サイズはすべてのキーで同じである必要があります。ここでのサイズはすべてのhasmapキーで4です。

4

2 に答える 2

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 に答える
0

ハッシュマップを使用する場合、2つの複製を作成する方法はありません。正しく使用すると、つまり、

たとえば、あなたの例を使ってみましょう。

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

ここから先に進むには2つの方法があります。1つは、あなたがしていることです。

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これで、メソッドを使用して、必要な文字列を返すようにすることもできます。

ただし、重複する値を検索する必要はありません。ハッシュマップを正しく使用すると、マップ自体が自動的に使用します。

于 2012-08-09T11:41:44.977 に答える