修改
我已尝试过此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<>();
String是Object的名称,但事实是多个对象可以具有相同的名称。所以我在我的搜索域中搜索一个对象,并且我希望将具有该名称的所有对象存储到ArrayList中,这样我就可以更改它们中的信息。
该对象有很多不同的值,如名称,位置,一些布尔值等。
我是否需要在我的对象类中创建一个HashCode方法,该方法将创建一个唯一的哈希码?
答案 0 :(得分:0)
使用标准Map<String, List<YourClassHere>>
实例时,请务必记住每个条目的地图值都是List<YourClassHere>
,并且不会以任何特殊方式处理它。所以在你的情况下,如果你有
private Map<String, List<Place>> placeMap = new HashMap<>();
然后要存储您需要执行的值,如下所示:
NamedPlace p = new NamedPlace(x,y,answer,col,cat);
List<Place> list = placeMap.get (answer);
list.add(p);
但是,这段代码存在一些潜在的问题。
answer
中可能没有placeMap
。List<Place>
个实例。因此,解决这些潜在问题的最佳方法是执行以下操作(Java 7及更高版本):
NamedPlace p = new NamedPlace(x,y,answer,col,cat);
if (placeMap.containsKey (answer) && placeMap.get (answer) != null) {
placeMap.get (answer).add(p);
} else {
List<Place> list = new ArrayList<Place> (); // ..or whatever List implementation you need
list.add (p);
placeMap.put (answer, list);
}
如果你想浏览地方列表,代码将如下所示:
if (placeMap.containsKey (key) && placeMap.get (answer) != null) {
for (Place p: placeMap.get (key)) {
// Do stuff
}
}