前回に引き続きコレクションの解説です。
前回までの記事はこちら phoeducation.work phoeducation.work
Queueインターフェース
QueueはFIFO(First In First Out)と呼ばれる形式のもので、これは先入れ先出しを表す待ち行列です。
待ち行列として順序だてて管理されており、重複は認められています。
上図では、田中、山田、鈴木、田中の順番でオブジェクトが格納されます。
オブジェクトを取り出すときは、先に入れたものから取り取り出されますので田中、山田、鈴木、田中の順番で取り出されます。
【Queueインターフェースを実装したクラス】
【PriorityQueueクラスの主なメソッド】
Queueインターフェースを実装したクラスにはPriorityQueueクラスがあります。
要素の出し入れを、FIFO、先いれ先だしで管理します。
これは先に入ったものから先に出力するもので、待ち行列として順序だてて管理されているため、重複することが許されています。
このクラスには表のようなメソッドが用意されています。
キュークラスのオブジェクトのことをキューと呼びます。
キューに要素を挿入するoffer( )や、要素を取り出すelement( )やpeek( )があります。またキューから要素を削除するpoll( )やremove( )があります。
【PriorityQueueの利用】
import java.util.PriorityQueue; import java.util.Queue; public class CollectionSample04{ public static void main(String[ ] args){ Queue<Integer> que = new PriorityQueue<Integer>(); Integer obj1 = new Integer("10"); Integer obj2 = new Integer("20"); Integer obj3 = new Integer("30"); que.offer(obj1); que.offer(obj2); que.offer(obj3); Integer temp; while((temp = que.poll( )) != null){ System.out.println(temp); } } }
実行結果
10 20 30
5行目では、Queue型のqueオブジェクトはジェネリックスを使用して、Ingeterオブジェクトのみが格納できると宣言しています。
6行目~8行目でobj1,obj2,obj3と3つのIntegerオブジェクトを用意し、9行目~11行目でoffer( )を使用して、キューに3つのIntegerオブジェクトを格納します。
13行目~15行目で、これらの要素を取り出すときに、poll( )を使用しますが、取り出されたものはIntegerオブジェクトとなるため、一旦Integer型の変数tempに格納して、画面表示しています。
Stackクラス
StackクラスはListインターフェースを実装したVectorクラスのサブクラスです。
StackはLIFO(Last In First Out)という、後入れ先出しの配列です。
Vectorクラスと同様、重複は認められ、順番に管理されています。
上図では、田中、鈴木、山田、田中の順番で格納されます。
オブジェクトを取り出すときは、後から入れたものが先に取り出されるので、田中、山田、鈴木、田中の順番で取り出されます。
【Stackクラス】
【Stackクラスの主なメソッド】
StackクラスはVectorクラスを継承したクラスです。
要素の出し入れを、LIFO、後いれ先だしで管理します。
これは後に入ったものから先に出力するものです。
入り口と出口が一つしかないオブジェクトです。
待ち行列として順序だてて管理されているため、重複することが許されています。
このクラスには表のようなメソッドが用意されています。
スタッククラスのオブジェクトのことをスタックと呼びます。
スタックに要素を挿入するpush( )や、要素を取り出すpeek()やpop()があります。
pop()は要素を取り出すと同時に要素を削除します。
import java.util.Stack; public class CollectionSample05{ public static void main(String[] args){ Stack<Integer> stack = new Stack<Integer>(); Integer obj1 = new Integer("100"); Integer obj2 = new Integer("200"); Integer obj3 = new Integer("300"); stack.push(obj1); stack.push(obj2); stack.push(obj3); System.out.println(stack.pop()); System.out.println(stack.pop()); System.out.println(stack.pop()); } }
実行結果
300 200 100
4行目で、Stack型のstackオブジェクトはジェネリックスを使用して、Ingeterオブジェクトのみが格納できると宣言しています。
5行目~7行目で、obj1,obj2,obj3と3つのIntegerオブジェクトを用意し、9行目~11行目で、push( )を使用して、スタックに3つのIntegerオブジェクトを格納します。
13行目~17行目で、これらの要素を取り出すときに、pop( )を使用しますが、取り出される順番は、後から入れたものから取り出されるため300、200、100の順番で取り出されて画面表示されます。
コレクション要素の取り出し
これまでオブジェクトを格納するコレクションを見てきましたが、ここでは、コレクションの要素を取り出すIteratorについてみていきましょう。
コレクションから要素を取り出す方法として、Iteratorを使用する方法、拡張for文を使用する方法、通常のfor文を使用する方法があります。
Iteratorとはコレクションに格納された要素を指し示す、カーソルのようなもので、反復子と呼ばれています。
Iteratorを利用して、要素を取り出すには、まず、Collectionインターフェースのメソッドである、iterator()を使用して、iteratorを取得します。
次にIteratorインターフェースのhasNext( )を使用して、次の要素があるかを確認します。
次の要素がある場合には、trueを返します。
trueを返した場合は、next()を使用して要素を取得します。
【Iteratorインターフェースの主なメソッド】
【Iteratorの利用】
import java.util.ArrayList; import java.util.Iterator; class CollectionSample06{ public static void main(String [ ] args){ ArrayList<String> list = new ArrayList<String>( ); list.add("Apple"); list.add("Orange"); list.add("Lemon"); Iterator<String> it = list.iterator( ); while(it.hasNext( )){ String str = it.next( ); System.out.println(str); } } }
実行結果
Apple Orange Lemon
5行目で、ArrayList型のlistオブジェクトはジェネリックスを使用して、Stringオブジェクトのみが格納できると宣言しています。
6行目~8行目で、listオブジェクトにadd()を使用して、Apple、Orange、Lemonを格納します。
10行目で、listオブジェクトからそれぞれの要素を取り出すために、iterator()を使用して、反復子を作成します。
ここで気をつけなければならないのは、反復子はlistオブジェクトの先頭に位置し、まだどの要素も指し示していません。
hasNext()を使用すると、現在、反復子が指し示している、次の要素があるかどうかを判断します。
11行目~14行目で、while文を使用し、hasNext()がtrueを返す場合は、next()を使用して、反復子を該当の要素に移動して、要素を取り出します。
例はwhile文でこれを繰り返し、Apple、Orange、Lemonをそれぞれ取り出して、画面に表示しています。
「コレクション Part4」へ続きます。
phoeducation.work
LINE公式アカウント
仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】