动态将数据输入到HashMap

时间:2018-10-30 09:15:03

标签: java arraylist hashmap

我想知道如何正确(甚至可以)将数据添加到HashMap之类的ArrayList上?

所以我有一个函数,该函数检查输入的字符串中的逗号并分隔值,将它们添加到ArrayList中,然后根据输入数据的字段名称存储键ArrayList到:

ArrayList<String> dataList = new ArrayList<>();
Map<String, ArrayList<String>> dataMap = new HashMap<String, ArrayList<String>>();
String[] parts;
public void CheckForMultipleEntries(String field, String data){
    dataList.clear();
    if(data.contains(",")){
        data.replace("", "");
        parts = data.split(",");
        for(String part : parts){
            dataList.add(part);
        }
        dataMap.put(field, dataList);
    }

    System.out.println(dataMap);
    System.out.println(dataMap.get("test"));
}

但是对于"Header"首先说我输入"test1, test2, test3"-这将正确输入并输出(如:{Header=[test1, test2, test3]}),但是如果输入下一个值,则输入{{1 }} "Body",然后在我输出地图时得到"test4, test5, test6"

为什么覆盖值而不覆盖键?我该如何解决?

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

该值被覆盖,因为您正在使用

dataList.clear();

您要将数组列表dataList的引用放入哈希图中。因此,每次分配新值时,您都必须重新初始化arraylist

dataList.clear();替换为dataList=new ArrayList<>();将解决您的问题

答案 1 :(得分:0)

Smth。像那样。别忘了,每个映射键都有自己的List

public static void add(Map<String, List<String>> map, String key, String value) {
    map.computeIfAbsent(key, k -> new ArrayList<>()).add(value);
}