Java 在不覆盖的情况下存储值
我有一张地图Java 在不覆盖的情况下存储值,java,hashmap,keyvaluepair,Java,Hashmap,Keyvaluepair,我有一张地图 “aaa”,1 “bbb”,2 “ccc”,3 “aaa”,4 问题是HashMap没有存储所有的键和值,正如我所理解的,当我尝试添加最后一对(“aaa”,4),它将不会被添加,取而代之的是“aaa”(我的意思是1)的值将在4上被覆盖 我知道,我可以创建一个类,在那个里我可以存储这些对,但我需要另一个解决方案。(不创建新类) 编辑------------------------------------ 实际上我有更多的对,我没有唯一的字符串或整数,我的意思是,即使我有两个相似的对,
“aaa”,1
“bbb”,2
“ccc”,3
“aaa”,4
HashMap
没有存储所有的键和值,正如我所理解的,当我尝试添加最后一对(“aaa”,4)
,它将不会被添加,取而代之的是“aaa”
(我的意思是1)的值将在4上被覆盖
我知道,我可以创建一个类,在那个里我可以存储这些对,但我需要另一个解决方案。(不创建新类)
编辑------------------------------------
实际上我有更多的对,我没有唯一的字符串或整数,我的意思是,即使我有两个相似的对,它们也会被存储起来,创建一个列表:
if (!map.containsKey("aaaa")) {
map.put("aaaa", new ArrayList<Integer>());
}
List<Integer> aaaaValues = map.get("aaaa");
aaaaValues.add(1);
aaaaValues.add(4);
...
if(!map.containsKey(“aaaa”)){
put(“aaaa”,新的ArrayList());
}
List aaaaValues=map.get(“aaaa”);
aa增加(1);
aa增加(4);
...
如果您的值是unieque,请将它们用作键。
您不必创建类。您可以使用List
还有一种方法,重写equals和hashCode,其中只有当字符串和整数参数成对唯一时,对象才是唯一的
Map<String, Integer> map = new HashMap<String, Integer>(){
@Override
public boolean equals(Object o)
{
// your realization
}
@Override
public int hashCode()
{
// your realization
}
};
Map Map=newhashmap(){
@凌驾
公共布尔等于(对象o)
{
//你的认识
}
@凌驾
公共int hashCode()
{
//你的认识
}
};
根据定义,地图将具有不同的键。如果您添加一个键值对,并且该键值已经存在,则新的键值对将覆盖现有的键值对
对于您的场景,当针对单个键有多个值时,您可以探索以下选项
选项1:由于键值对不是唯一的,所以可以将其存储为列表。对于每个键值对,可以创建一个对并将其插入列表中
List<Pair<String, Integer>> data = new ArrayList();
Pair<String, Integer> item = new Pair("abc", 1);
data.add(item);
List data=new ArrayList();
配对项目=新配对(“abc”,1);
数据。添加(项目);
此选项不提供地图附带的优化查找功能
备选案文2。创建
地图
。您将无法再在地图上执行简单的put操作,但您将能够在不丢失信息的情况下存储与每个键对应的所有项,并更快地检索它们。查看MultiMap为什么不使用地图?或者Apache Commons/Guava MultiMap?如果Integer是唯一的,您可以使用
也可以选择ListI,希望有一天java core集合中有multi-map。