我有Map<String, Integer>
例如
"aaa", 1
"bbb", 2
"ccc", 3
"aaa", 4
问题是HashMap
没有存储所有的键和值,正如我所理解的,当我尝试添加最后一对("aaa", 4)
时,它不会被添加,而不是这样, "aaa"
(我的意思是1)的值将在4上被覆盖。
我知道,我可以创建类,我可以存储这些对,但我需要另一种解决方案。 (没有创建新类)
EDIT ------------------------------------ 实际上我有更多的对,我没有唯一的字符串或整数,我的意思是,即使我有两个相似的对,他们将被存储
答案 0 :(得分:0)
创建一个列表:
if (!map.containsKey("aaaa")) {
map.put("aaaa", new ArrayList<Integer>());
}
List<Integer> aaaaValues = map.get("aaaa");
aaaaValues.add(1);
aaaaValues.add(4);
...
答案 1 :(得分:0)
如果您的值是unieque,请将它们用作键。
您不必创建类。您可以使用List<org.apache.commons.lang3.tuple.Pair<String, Integer>>
也是一种方法,覆盖equals和hashCode,只有当String和Integer参数在pair
中唯一时,该对象才是唯一的Map<String, Integer> map = new HashMap<String, Integer>(){
@Override
public boolean equals(Object o)
{
// your realization
}
@Override
public int hashCode()
{
// your realization
}
};
答案 2 :(得分:0)
根据定义,地图将具有不同的键。如果添加键值对并且该键已存在,则新键值对将覆盖现有键值对。
对于您的方案,当您针对单个键有多个值时,可以浏览以下选项
选项1:由于您的键值对不是唯一的,因此可以将其存储为pairs的列表。对于每个键值对,您可以创建一对并将其插入列表中。
List<Pair<String, Integer>> data = new ArrayList();
Pair<String, Integer> item = new Pair("abc", 1);
data.add(item);
此选项不会为您提供Map附带的优化查找功能。
选项2.创建Map<String, List<Integer>>
。您将无法再在地图上执行简单的放置操作,但您将能够存储与每个键对应的所有项目,而不会丢失信息并更快地检索它们。