未来エンジニア養成所Blog

月単価180万以上のプログラミング講師がプログラミングを皆に楽しんでもらうための情報をお届けします。

【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



LINE公式アカウント

仕事が辛くてたまらない人生が、仕事が楽しくてたまらない人生に変わります。
【登録いただいた人全員に、無料キャリア相談プレゼント中!】


LineOfficial

友だち追加


あわせて学習したい

phoeducation.work phoeducation.work



【まついのLINE公式アカウントはこちらから!】
Line公式アカウント