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>>

これも実現します。を実行するときputは、キーに関連付けられたリストが既に存在するかどうかを確認します。ある場合は、それ以外putの場合は になります。同様に、 aは関連付けられたリストから値を削除するか、空のリストになる場合はリストを完全に削除します。get(key).add(value)put(new List(value))remove

また、Map<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 に答える