【发布时间】:2015-07-08 14:42:27
【问题描述】:
编辑
我试过这个HashMap with multiple values under the same key,我的hashMap现在看起来像这个HashMap<String, List<Place>> placeMap = new HashMap<>();
还尝试使用 Object 而不是 Place(place 是我的超类)。但是当我现在创建我的子类并想要将它们添加到 HashMap 时,我得到:
HashMap<String,List<Place>>类型中的 put(String, List) 方法不适用于参数 (String, NamedPlace)
和
HashMap<String,List<Place>>类型中的 put(String, List) 方法不适用于参数 (String, DescPlace)
这是我的添加导致错误:
NamedPlace p = new NamedPlace(x,y,answer,col,cat);
placeMap.put(answer, p);
DescPlace dp = new DescPlace(x,y,answer, desc, col, cat);
mp.add(dp);
placeMap.put(answer, dp);
NamedPlace 和 DescPlace 都是 Place 的子类,我希望它们都在同一个 HashMap..
OP
我正在这里做一个小项目。问题是我需要在项目的这一部分使用 HashMap 而不是 ArrayList,因为 HashMap 的搜索速度要快得多。我已经创建了一个这样的 HashMap:
HashMap<String, Object> placeMap = new HashMap<>();
字符串是对象的名称,但问题是多个对象可以具有相同的名称。所以我在我的搜索字段中搜索一个对象,我想将所有具有该名称的对象存储到一个 ArrayList 中,这样我就可以只更改它们中的信息。
对象有很多不同的值,比如名称、位置、一些布尔值等。
我是否需要在我的对象类中创建一个 HashCode 方法来创建唯一的哈希码?
【问题讨论】:
-
使用
Map<String, List<YourObject>> -
由于地图值现在是
List<NamedPlace>,因此您必须将set和get该类型的对象传入/传出地图。要添加NamedPlace,请检索列表(如果存在)并将NamedPlace添加到列表中 -
您非常接近解决方案,只需将
placeMap.put(answer, p);更改为placeMap.get(answer).add(p);。确保您不会遇到地图每个条目的未初始化列表。 -
Multimap 试试这个