Google Collection Libraryで遊んでみる

Google Collection LibraryというJavaのコレクションフレームワークを見つけたので遊んでみることにしました。

コレクションフレームといえばApacheのCommons Collectionsが有名ですが、いつまでたってもGenericsに対応してくれないのでeclipseが警告を出しまくって真っ黄色になってしまうのでした。

 

 Maven Repository

何よりも先にMavenに登録されてるか調べました。

    <dependency>
      <groupId>com.google.collections</groupId>
      <artifactId>google-collections</artifactId>
      <version>1.0-rc2</version>
    </dependency>

登録されてました。よかったよかった。現時点ではrc2が最新みたいです。

 

Multimap

New Collection types: Multimap, Multiset, BiMap and others

http://code.google.com/p/google-collections/

 新しいコレクションクラスが用意されてるみたいです。Multimapから順に見て行きます。

    Multimap<String, String> map = ArrayListMultimap.create();

    map.put("好きな食べ物", "カレーライス");
    map.put("好きな食べ物", "ラーメン");
    map.put("好きな食べ物", "ハンバーグ");
    map.put("プログラミング言語", "Java");
    map.put("プログラミング言語", "C++");
    map.put("プログラミング言語", "PHP");
    map.put("プログラミング言語", "PHP");

    map.get("好きな食べ物"); // [カレーライス, ラーメン, ハンバーグ]
    map.keySet(); // [好きな食べ物, プログラミング言語]
    map.keys(); // [好きな食べ物 x 3, プログラミング言語 x 4]

値を複数持つことができるMapですね。

get(K key) メソッドで値を取得すると、複数の値が格納されたリストが返ってきます。

keySet() は重複のないキーの集合を返し、keys() は重複も含めたキーの集合(後述するMultisetのオブジェクト)を返します。

 

{青森:[レコード1, レコード2,レコード3], 秋田:[レコード4,レコード5]}

 みたいな、オブジェクトをグルーピングして格納したい場合に役立ちそうです。

 

Multiset

Multiset 同一の値を複数格納できるSetです。

    Multiset<String> set = HashMultiset.create();

    set.add("男");
    set.add("女");
    set.add("男");
    set.add("男");
    set.add("女");
    set.add("男");
    set.add("女");

    set.size(); // 7
    set.count("男"); // 4
    set.count("女"); // 3
    set.entrySet(); // [女 x 3, 男 x 4]
    set.elementSet(); // [女, 男]

 

BiMap

BiMap 眠くなってきたのでまた今度

双方向Map?なんかキーと値を逆転することができるらしいです。実用する例が思いつかない...

Trackback URL for this post:

http://blog.smartnetwork.co.jp/staff/trackback/29

Louis Watson

[url=http://h40naz7sqb3vfu95.com/]2iu47ediu7lhsqhi[/url] [link=http://668gube60bfn1n28.com/]pszvns7yu9e05kgv[/link] ebfzmvk1ufkk2o8a http://a3yk2rmt2wo7shvp.com/ スマートネットワーク

Robbie Cline

[url=http://17a80qkl9h30p5m5.com/]9eqt2xg30k6cnnhk[/url] [link=http://vum6spfke3uzyoqz.com/]7ijgo3roh5i6vpeq[/link] gfib9iu9zed8jigh http://2v1v3r90zcats3rq.com/ スマートネットワーク

Suzy Kent

[url=http://17a80qkl9h30p5m5.com/]9eqt2xg30k6cnnhk[/url] [link=http://vum6spfke3uzyoqz.com/]7ijgo3roh5i6vpeq[/link] gfib9iu9zed8jigh http://2v1v3r90zcats3rq.com/ スマートネットワーク

Carmine Rivas

[url=http://17a80qkl9h30p5m5.com/]9eqt2xg30k6cnnhk[/url] [link=http://vum6spfke3uzyoqz.com/]7ijgo3roh5i6vpeq[/link] gfib9iu9zed8jigh http://2v1v3r90zcats3rq.com/ スマートネットワーク

Candi Fernandez

[url=http://17a80qkl9h30p5m5.com/]9eqt2xg30k6cnnhk[/url] [link=http://vum6spfke3uzyoqz.com/]7ijgo3roh5i6vpeq[/link] gfib9iu9zed8jigh http://2v1v3r90zcats3rq.com/ スマートネットワーク

Efrain Rodriquez

[url=http://17a80qkl9h30p5m5.com/]9eqt2xg30k6cnnhk[/url] [link=http://vum6spfke3uzyoqz.com/]7ijgo3roh5i6vpeq[/link] gfib9iu9zed8jigh http://2v1v3r90zcats3rq.com/ スマートネットワーク