今回はセット (java.util.Set) 、キュー (java.util.Queue) 、デック (java.util.Deque) について。 Groovy JDK を参考にしています(一覧)。
- 作者: Dierk Konig,Andrew Glover,Paul King,Guillaume Laforge,Jon Skeet,杉浦孝,櫻井正樹,須江信洋,関谷和愛,佐野徹郎,寺沢尚史
- 出版社/メーカー: 毎日コミュニケーションズ
- 発売日: 2008/09/27
- メディア: 単行本(ソフトカバー)
- 購入: 5人 クリック: 146回
- この商品を含むブログ (121件) を見る
セット Set
List の [] ような簡略記法が Set にはないので、Set のインスタンス生成のためには
という方法を使います。
def set1 = new HashSet(); assert set1 instanceof HashSet; def set2 = new HashSet(['a', 'b', 'c']); assert set2 instanceof HashSet; def set3 = ['a', 'b', 'c'] as Set; assert set3 instanceof HashSet; def set4 = new HashSet('a'..'e'); assert set4 instanceof HashSet; def set5 = ('a'..'e') as Set; assert set5 instanceof HashSet;
Set に新に追加されたメソッドはなく、新に定義されているメソッドは Collection のメソッドをオーバーライドしているものだけです。
メソッド名 | 返り値 | メソッド名 (Generics) |
返り値 返り値 |
|
---|---|---|---|---|
asImmutable() | Set | asImmutable() | Set<E> | |
asSynchronized() | Set | asSynchronized() | Set<E> | |
minus(Object) minus(Collection) |
Set | minus(E) minus(Collection<E>) |
Set<E> |
もちろん、JDK に定義されているメソッド、Collection に定義されているメソッドは使えます。 また、Collection に定義されている Collection を返すメソッドは、おそらく全て Set を返します(確かめてませんが)。
キュー Queue
Groovy JDK には、Queue に新に定義されているメソッドはありません。 なので、ここではインスタンス生成と基本メソッドの使用法のみ取り上げます。
もちろん、Queue の実装クラスのコンストラクタを用いてインスタンスを生成することも出来ますが、下記のサンプルでは「as Queue」を用いて List から Queue へ変換しています。 この場合、Queue の実装クラスは LinkedList になります。
def queue = [1, 2, 3] as Queue; // def queue = new LinkedList([1, 2, 3]); でも良い assert queue instanceof LinkedList; queue.offer(4); assert queue == [1, 2, 3, 4]; peeked = queue.peek(); assert (peeked == 1) && (queue == [1, 2, 3, 4]); polled = queue.poll(); assert (polled == 1) && (queue == [2, 3, 4]);
デック Deque
Queue と同様、ここでもインスタンス生成と基本メソッドの使用法のみ取り上げます。
Deque は「as Deque」で List などから Deque に変換できないので、下記では「as ArrayDeque」という風に、具象クラスを指定して List を Deque に変換しています(もちろん、Deque の実装クラスのコンストラクタを呼び出してインスタンス生成をすることもできます)。
def deque = [1, 2, 3] as ArrayDeque; // def deque = new ArrayDeque([1, 2, 3]); でも良い assert deque instanceof Deque; deque.push(0); assert deque.toList() == [0, 1, 2, 3]; peeked = deque.peek(); assert (peeked == 0) && (deque.toList() == [0, 1, 2, 3]); poped = deque.pop(); assert (poped == 0) && (deque.toList() == [1, 2, 3]);