2013年4月27日土曜日

[Java]集合の演算

Set<T>のことが気になってインタフェースを見直ししてみました。
今までは、重複不可のリストくらいに思っていましたが、これよく見ると、演算可能な集合を実装したクラスなんですね。
たとえば、
  • 足し算:addAll(Collection<? extends E> c) 
  • 引き算:removeAll(Collection<?> c) 
  • AND:retainAll(Collection<?> c) 
  • OR:=足し算 
という集合同士の演算が可能です。組み合わせればXORとかも作れそうですね(addAll→retainAll→removeAll)。
そして集合に対する評価として
  • ALL:containsAll(Collection<?> c) とcontains(Object o)
  • ANY:!Collections.disjoint(Collection<?> c1, Collection<?> c2) 
なんでANY(いずれかが一致)がないんだろう。。。
と思ったら、Collectionsにdisjoint(Collection<?> c1, Collection<?> c2) というメソッドがあります。
このメソッドは、引数の2つのコレクションを比較し同じものがない場合trueを返します。
つまりその結果をNotすれば、containsAnyになる。ということですね。

0 件のコメント: