倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Groovy in Addiction (9) : その他のコレクション型 Set, Queue, Deque

今回はセット (java.util.Set) 、キュー (java.util.Queue) 、デック (java.util.Deque) について。 Groovy JDK を参考にしています(一覧)。

Groovyイン・アクション

Groovyイン・アクション

セット 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]);