java - 允许重复键并保持插入顺序的映射

标签 java

目前我正在使用 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<String, String> linkedHashMap = new LinkedHashMap<String, String>();
linkedHashMap.put("R1", "Data1");   
linkedHashMap.put("R2", "Data2");
linkedHashMap.put("R1", "Data3");
linkedHashMap.put("R2", "Data4");

当我尝试在 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);
        }
    }
}

关于java - 允许重复键并保持插入顺序的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35129071/

相关文章:

java - 将 Google proto 缓冲区与 Jersey/JAX-RS 相结合

java - 在 switch 语句中使用 ctrl-z 撤消的未弃用方法

java - java中动态创建对象

java - OnWindowFocusChanged 与 OnCreate 用于分配对象属性

java - 在嵌套 for 循环中使用变量/动态条件变量

java - 如何用方法引用替换 "!= null"语句?

java - 确定字符串中的字符数

java - 如何使用 JSqlParser 添加新条件?

java - 如何观察多个可观察线程

java - Spring RestTemplate 发布响应