0

クラスのオブジェクトをarraylistからhashmapに格納したいのですが、1つのキーに複数のオブジェクトが含まれている可能性があります。その方法

これが私のコードです、

Map<Integer, classObject> hashMap = new HashMap<Integer, classObject>();

for(int i=0; i<arraylist.size(); i++)
            {
                sortID = arraylist.get(i).getID();
                if(!hashMap.containsKey(sortID))
                {
                    hashMap.put(sortID, arraylist.get(i));
                }
                hashMap.get(sortID).add(arraylist.get(i)); //i got error in add method
            }

同じキー値のハッシュマップにクラスオブジェクトを追加するアイデアを与えてください...

4

6 に答える 6

3

あなたが試すことができます:

Map<Integer, List<classObject>> hashMap = new HashMap<Integer, List<classObject>>();
    for(int i=0; i<arraylist.size(); i++)
    {
        sortID = arraylist.get(i).getID();
        List<classObject> objectList = hashMap.get(sortID);
        if(objectList == null)
        {
            objectList = new ArrayList<>();
        }
        objectList.add(arraylist.get(i));
        hashMap.put(sortID, objectList);
    }
于 2012-12-10T12:16:54.480 に答える
1

ほとんどの場合、set または arraylist を値として使用することは、多少のオーバーヘッドのように思われ、保守が容易ではありません。これに対するエレガントな解決策は、Google Guava の MultiMap を使用することです。

MultiMap インターフェースの API を読むことをお勧めします: http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/collect/Multimap.html

例:

ListMultimap<String, String> multimap = ArrayListMultimap.create();
for (President pres : US_PRESIDENTS_IN_ORDER) {
multimap.put(pres.firstName(), pres.lastName());
}
for (String firstName : multimap.keySet()) {
List<String> lastNames = multimap.get(firstName);
out.println(firstName + ": " + lastNames);
}

次のような出力が生成されます。

ジョン: [アダムス、アダムス、タイラー、ケネディ]

于 2012-12-10T12:21:51.077 に答える
1

あなたができることは、キーをオブジェクトのリストにマップすることです。

Map<Integer, ArrayList<Class>> hashMap = new HashMap<Integer, ArrayList<Class>>();

次に、新しいオブジェクトを追加するには、次のようにします。

hashMap.get(sortID).add(classObject);
于 2012-12-10T12:11:45.190 に答える
1

キーと値のペアでは、すべてのキーが 1 つのオブジェクトのみを参照します。そのため、キーと呼ばれます。

ただし、同じキーに対して複数のオブジェクトを保存する必要がある場合は、 を作成Listして単一のキーで保存できます。このようなもの:

HashMap<Key, ArrayList<Object>>
于 2012-12-10T12:13:35.257 に答える
0

サードパーティのライブラリの使用が許可されている場合は、GuavaMultimapの使用を強くお勧めします。

于 2012-12-10T12:31:42.983 に答える
0

これを行う唯一の方法は、値をオブジェクトのリストにして、dup を見つけたときにそのリストに追加することです。

于 2012-12-10T12:12:17.427 に答える