Hashtable<Integer,String> ht = new Hashtable<Integer,String>();
ht.put(1,"student1");
ht.put(1,"student2");
「単一のキー」のすべての値を反復処理するにはどうすればよいですか?
key:1
values: student1, student2
以下を使用する必要があります。
Hashtable<Integer, List<String>> ht = new Hashtable<Integer, List<String>>();
関連付けられた に特定のキーの新しい文字列値を追加しますList
。
そうは言っても、HashMap
代わりにa を使用する必要がありHashtable
ます。後者はレガシークラスで、ずっと前に前者に置き換えられました。
Map<Integer, List<String>> map = new HashMap<Integer, List<String>>();
次に、新しいエントリを挿入する前に、Map#containsKey()
メソッドを使用してキーが既に存在するかどうかを確認します。キーが既に存在する場合は、対応するリストを取得し、それに新しい値を追加します。それ以外の場合は、新しいキーと値のペアを配置します。
if (map.containsKey(2)) {
map.get(2).add("newValue");
} else {
map.put(2, new ArrayList<String>(Arrays.asList("newValue"));
}
別のオプションは、サードパーティのライブラリを使用できる場合、グアバのを使用することです。Multimap
Multimap<Integer, String> myMultimap = ArrayListMultimap.create();
myMultimap.put(1,"student1");
myMultimap.put(1,"student2");
Collection<String> values = myMultimap.get(1);
Hashtable は、1 つのキーに対して複数の値を格納しません。
ht.put(1, "student2") と書くと、"1" の付いた値が上書きされて使えなくなります。
1 つのキーに複数の値が必要な場合は、ArrayLists の HashTable の使用を検討してください。
Hashtable では、キーに複数の値を使用できません。キーに 2 番目の値を追加すると、元の値が置き換えられます。