しかし、Javaの標準ライブラリに含まれるMapの実装にはHashMapやTreeMapがありますが、これらは重複したキーの要素を単純に登録することはできません。
対策1.HashMapなどの要素をコレクション型(ArrayListなど)にする
もっとも単純な解決策は要素をコレクション型にすることです。
iimport java.util.*;
public class Test {
public static void main(String[] args) {
Map<String,List<Integer>> map = new HashMap<String,List<Integer>>();
// 登録
List<Integer> list = new ArrayList<Integer>();
list.add(11);
list.add(12);
map.put("group1", list);
// 参照
for ( Integer i : map.get("group1") ) {
System.out.println(i);
}
}
}
対策2.guava-librariesのようなサードパーティライブラリを使用する
重複キーをうまく取り扱うことができるサードパーティ製の信頼できるライブラリが公開されています。
Guavaプロジェクトのページ
https://code.google.com/p/guava-libraries/
重複キーを扱えるMap実装(ArrayListMultiMap)
http://guava-libraries.googlecode.com/svn/tags/release03/javadoc/com/google/common/collect/ArrayListMultimap.html
下記のサンプルコードを見ると登録がとても簡潔にできるようになっているのが分かるかと思います。
import java.util.*;
import com.google.common.collect.*;
public class Test2 {
public static void main(String[] args) {
Multimap<String,Integer> map = ArrayListMultimap.create();
// 登録
map.put("group1", 11);
map.put("group1", 12);
// 参照
for ( Integer i : map.get("group1") ) {
System.out.println(i);
}
}
}
0 件のコメント:
コメントを投稿