0

我想存储在具有多个值的映射键中。例如:我正在从 ArrayList 读取字符串的键,从另一个 ArrayList 读取整数的值:

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

我想像这样存储这些信息: Map < String, ArrayList < Integer>>

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

有可能做到这一点吗?

4

2 回答 2

3

我推荐使用Guava MultiMap。或者,您的

Map<String, ArrayList<Integer>>

也会做到这一点。在做 a 时put,判断是否已经有一个与该键关联的列表;如果有,那么你的put将是 a get(key).add(value),否则它将是 a put(new List(value))。同样, aremove将从关联列表中删除一个值,否则如果这将导致一个空列表,则将完全删除该列表。

此外, aMap<String, HashSet<Integer>>可能会导致比列表映射更好的性能;如果您想将重复值与键相关联,显然不要这样做。

于 2013-04-11T18:06:24.587 回答
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 非常相似的东西,而没有依赖关系。

于 2013-04-11T18:14:48.907 回答