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。