Javaライブラリ(Commons)Collections | Hello, Stupid World!

Hello, Stupid World!

いろいろとメモ代わりに書いていきます。

今回はCommons Collections。コレクションを扱う為のライブラリです。

昔はジェネリクスに対応してなかったそうですが、現在の4.0ではしている様子。

使い方が分からないときはテストコードを見ましょう。
テストコードは~test-sources.jarとかそんな名前でダウンロードしたzipに入ってます。

例えばこれはDefaultedMapというクラスのテストコードですが

final Map<K, V> map = new DefaultedMap<K, V>((V) "NULL");

assertEquals(0, map.size());
assertEquals(false, map.containsKey("NotInMap"));
assertEquals("NULL", map.get("NotInMap"
));

このようにJUnitで書かれてます。
これを見ればコンストラクタで指定した値がデフォルト値となって
get呼んだ時に該当の物がなければデフォルト値を取ってくるんだな
とか分かりますよね。
APIドキュメントとテストコードを見るのは基本です。
それでも分からなければグーグル先生に聞くしかありませんが。

どのようなクラスがあるか、私が試しに作ったテストコードとともに
見ていきましょう。

Bag<String> bag = new HashBag<String>();
bag.add("AAA");
bag.add("BBB");
bag.add("CCC");
bag.add("AAA");

assertEquals("個数取得", 2, bag.getCount("AAA"));

これはBagというインタフェースです。
getCountにより指定値が何個入っているか取得できます。

BidiMap<String, Integer> bidimap = new DualHashBidiMap<String, Integer>();
bidimap.put("BBB",2);
bidimap.put("CCC",3);
bidimap.put("AAA",1);

assertEquals("値取得", 3, bidimap.get("CCC").intValue());
assertEquals("キー取得", "AAA", bidimap.getKey(1));

BidiMapというインタフェースです。
Mapと違いキーからだけでなく値を指定してキーを取得できます。


List<String> list = new ArrayList<String>();
list.add("AAA");
BoundedCollection<String> bounded = FixedSizeList.fixedSizeList(list);
try{
 bounded.add("BBB");
 fail("値追加");
}catch(Exception e){
 try{
  bounded.clear();
  fail("値削除");
 }catch(Exception e2){
  //正常
 }
}

BoundedCollectionという制限付コレクションのインタフェースです。
FixedSizeListは文字通りサイズが固定となる為、addやclearを使うと
例外が発生します。


MultiValueMap multi = new MultiValueMap();
multi.put(1, " aa");multi.put(1, "BB");
multi.put(2, "CC");

List<String> val2 = new ArrayList<String>();
val2.add("AA");
val2.add("BB");

assertEquals("複数取得", val2, multi.get(1));

値を複数持てるMultiValueMapです。

このように多くの拡張したコレクションが存在します。
ある程度テストしないと怖くて使えないだろうけど、使えるようになったら
便利そうですね。