Java 允许复制密钥并保持插入顺序的映射

Java 允许复制密钥并保持插入顺序的映射,java,Java,目前我正在使用LinkedHashMap来维护插入顺序 我使用的LinkedHashMap的语法: private LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>(); linkedHashMap.put("R1", "Data1"); linkedHashMap.put("R2", "Data2"); linkedHashMap.put("R3", "D

目前我正在使用LinkedHashMap来维护插入顺序

我使用的LinkedHashMap的语法:

private LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("R1", "Data1");   
linkedHashMap.put("R2", "Data2");
linkedHashMap.put("R3", "Data3");
linkedHashMap.put("R4", "Data4");
private LinkedHashMap LinkedHashMap=new LinkedHashMap();
linkedHashMap.put(“R1”、“Data1”);
linkedHashMap.put(“R2”、“数据2”);
linkedHashMap.put(“R3”、“Data3”);
linkedHashMap.put(“R4”、“Data4”);
这很好用。但我有我必须使用重复密钥的地方,我也有维护插入数据的地方

例如:

private LinkedHashMap<String, String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("R1", "Data1");   
linkedHashMap.put("R2", "Data2");
linkedHashMap.put("R1", "Data3");
linkedHashMap.put("R2", "Data4");
private LinkedHashMap LinkedHashMap=new LinkedHashMap();
linkedHashMap.put(“R1”、“Data1”);
linkedHashMap.put(“R2”、“数据2”);
linkedHashMap.put(“R1”、“Data3”);
linkedHashMap.put(“R2”、“数据4”);
当我试图在linkedHaphMap中保留重复数据时,它会删除重复数据并只保留一个数据

那么,如何在java中插入重复数据并保持插入顺序呢?实现我的案例的方法是什么?

试试这个:

public class Test {

    public static void main(String[] args) {
        Map<String, List<String>> map = new LinkedHashMap<>();
        put(map, "R1", "Data1");
        put(map, "R2", "Data2");
        put(map, "R1", "Data3");
        put(map, "R2", "Data4");

        System.out.println(map); // prints {R1=[Data1, Data3], R2=[Data2, Data4]}
    }

    public static void put(Map<String, List<String>> map, String key, String value) {
        if (map.get(key) == null) {
            List<String> list = new ArrayList<>();
            list.add(value);
            map.put(key, list);
        } else {
            map.get(key).add(value);
        }
    }
}
公共类测试{
公共静态void main(字符串[]args){
Map Map=newlinkedhashmap();
放置(地图,“R1”、“数据1”);
放置(地图、“R2”、“数据2”);
放置(地图、R1、数据3);
放置(地图、“R2”、“数据4”);
System.out.println(map);//打印{R1=[Data1,Data3],R2=[Data2,Data4]}
}
公共静态void put(映射映射、字符串键、字符串值){
if(map.get(key)==null){
列表=新的ArrayList();
列表。添加(值);
地图。放置(键、列表);
}否则{
map.get(key)、add(value);
}
}
}

对数据使用复合模式。简单的例子可能是这样的

public class Container{
    String value;
    ArrayList<String> list = null;

    public Container(String value){
        this.value = value;
    }

    public void add(String newvalue){
         if (list == null){
             list = new ArrayList();
             list.add(value);
             list.add(newvalue);
         }else{
             list.add(newvalue);
         }
    }
    public boolean isSingleValue(){
         return list==null;
    }
    public Iterator<String> getOrderedList(){
          return list.iterator();
    }
    public String getValue(){
          return value;
    }
private LinkedHashMap LinkedHashMap=new LinkedHashMap();
卖出(“R1”、“数据1”);
出售(“R2”、“数据2”);
卖出(“R1”、“数据3”);
卖出(“R2”、“数据4”);
私有void put(字符串键、字符串值){
if(linkedHashMap.get(key)==null){
put(key,newarraylist());
}
linkedHashMap.get(key).add(value);
}
专用布尔值isDuplicate(字符串键){
return(linkedHashMap.get(key.size()>1)
}

你应该看看:
linkedHashMap.get(“R2”)
会给你什么?当有两个带有该键的条目,并且只有一个时?地图不是为同一个键的多个副本设计的,您应该设计自己的类或使用
列表
请查看下面的帖子。插入顺序是什么意思?插入的修改值是否为最新值?
if (map.containsKey(key)){
   map.get(key).add(value);
}else{
   map.put(key,new Container(value))
}
private LinkedHashMap<String, List<String>> linkedHashMap = new LinkedHashMap<String, List<String>>();

put("R1", "Data1");   
put("R2", "Data2");
put("R1", "Data3");
put("R2", "Data4");

private void put(String key, String value){
    if(linkedHashMap.get(key) == null){
        linkedHashMap.put(key, new ArrayList<String>());
    }
    linkedHashMap.get(key).add(value);
}

private boolean isDuplicate(String key){
    return (linkedHashMap.get(key).size()>1)
}