未来エンジニア養成所Blog

プログラミングを皆に楽しんでもらうための情報をお届けします。

【Java】コレクション Part3

title

前回に引き続きコレクションの解説です。

前回までの記事はこちら phoeducation.work phoeducation.work


Queueインターフェース

QueueはFIFO(First In First Out)と呼ばれる形式のもので、これは先入れ先出しを表す待ち行列です。

待ち行列として順序だてて管理されており、重複は認められています。

Queueインターフェース


上図では、田中、山田、鈴木、田中の順番でオブジェクトが格納されます。

オブジェクトを取り出すときは、先に入れたものから取り取り出されますので田中、山田、鈴木、田中の順番で取り出されます。


【Queueインターフェースを実装したクラス】
Queue実装クラス


【PriorityQueueクラスの主なメソッド】
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クラス


【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インターフェースの主なメソッド


【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


参考図書



独学で挫折しそうになったら、オンラインプログラミングスクール
未来エンジニア養成所Logo



あわせて学習したい

phoeducation.work phoeducation.work