java- hashmap一个键和多个值替代将值部分存储在List中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java- hashmap一个键和多个值替代将值部分存储在List中相关的知识,希望对你有一定的参考价值。

通常当你在哈希映射中有相同键的多个值时,我找到的答案将使用ListArrayList来存储值部分。例如:

Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>();

我想知道可以保持hashmap的正常定义并将任何新值附加到旧值(逗号分隔)。像这样的东西:

Map<String, String> memOf = new HashMap<String, String>();
    Map<String, String> subOrg = new HashMap<String, String>();
    Map<String, String> email = new HashMap<String, String>();

 String line="";
    String source="";
    String sub="";
    String obj="";
    String hashKey="";
    String hashVal="";


    for (Text value : values){ //start iterate over values 
        line=value.toString();
        String[] parts=line.trim().split(",");



    source=parts[0].trim();
    sub=parts[1].trim();
    obj=parts[2].trim();
    hashKey=sub;



    if (source.equals("memberOf")){
        hashVal=memOf.get(hashKey);
        if (hashVal!=null){
        hashVal=hashVal+","+obj;
        memOf.put(hashKey, hashVal);
        } 
    }

}

前面的代码是填充哈希映射,然后读取单个值,使用split(",")and将它们存储在String数组中。就像是:

for (String key1 : memOf.keySet()) {             
    x=key1;
    String[] y=memOf.get(x).toString().split(",");

    int numberOfItems = y.length;
        for (int i=0; i<numberOfItems; i++){  
    System.out.println(y[i]); 
    }
}
答案

我想知道可以保持hashmap的正常定义并将任何新值附加到旧值(逗号分隔)。

你已经做到了。以低效的方式,但你做到了。

正如Andy Turner在评论中指出的那样,你可以寻找像Guava的MultiMap这样的实现,它允许将单个键映射到多个值。

除此之外,official Map documentation没有报告将一个值添加到另一个值的能力,而只是替换它。在整数的情况下,你可以increment them pretty easily,但其余的你必须自己做或找到一个更有效的方式(例如ArrayList)。

以上是关于java- hashmap一个键和多个值替代将值部分存储在List中的主要内容,如果未能解决你的问题,请参考以下文章

使用java Spring将值注入Hashmap

将值转换为 Spark 数据集中的列(将列的键和值对转换为常规列)[重复]

java - 如何将Java hashMap内容的全部放在另一个上,但不替换现有的键和值?

HashMap在同一个键下有多个值

Java调整嵌套的Hashmap值

java问题,我想在java中存储键值对,以便使用,但是键值对的键和值都有重复元素,使用hashmap会产生覆盖。