在地图中存储具有多个值的键

时间:2013-04-11 18:04:39

标签: java collections

我想存储具有多个值的地图键。 例如:我从ArrayList读取字符串的键,从另一个ArrayList读取整数值:

Keys                     Values
humans                   50
elfs                     20
dwarfs                   30
humans                   40
elfs                     10

我希望存储这样的信息:Map< String,ArrayList<整数>>

[humans = {50,40}]
[elfs = {20,10}]
[dwarfs = {30}]

有可能这样做吗?

2 个答案:

答案 0 :(得分:3)

我建议使用Guava MultiMap。或者,你的

Map<String, ArrayList<Integer>>

也将实现这一目标。在执行put时,确定是否已存在与密钥关联的列表;如果有,那么put将是get(key).add(value),否则它将是put(new List(value))。同样地,remove将从关联列表中删除值,否则将完全删除列表,如果这将导致空列表。

此外,Map<String, HashSet<Integer>>可能会比列表地图带来更好的表现;如果要将重复值与键关联,显然不要这样做。

答案 1 :(得分:2)

我这样做:

public class StringToListInt {
    private Map<String, List<Integer>> stringToListInt;

    public StringToListInt() {
        stringToListInt = new HashMap<String, List<Integer>>();
    }

    public void addInt( String string, Integer someValue ) {
        List<Integer> listInt = stringToListInt.get( string );
        if ( listInt == null ) {
            listInt = new ArrayList<String>();
            stringToListInt.put( string, listInt );
        }
        listInt.add( someValue );
    }

    public List<Integer> getInts( String string ) {
        return stringToListInt.get( string );
    }
}

如果你添加一些泛型,我想你会得到一些非常类似于Guava的MultiMap而没有依赖的东西。