0

我想将类的对象从arraylist存储到hashmap,一个键可能包含多个对象,怎么做

这是我的代码,

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

你可以做的是用对象列表映射键,即

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

然后添加一个新对象,你可以这样做:

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

在键值对中,每个键都指向一个且只有一个对象。这就是为什么它被称为钥匙。

但是,如果您需要为同一个键存储多个对象,您可以创建一个List并使用单个键存储它。像这样的东西:

HashMap<Key, ArrayList<Object>>
于 2012-12-10T12:13:35.257 回答
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 回答
0

做到这一点的唯一方法是让您的价值成为您的对象列表,并在找到副本时添加到该列表中。

于 2012-12-10T12:12:17.427 回答
0

如果您被允许使用第 3 部分库,我强烈建议您使用GuavaMultimap

于 2012-12-10T12:31:42.983 回答