English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java 基础教程

Java プロセス制御

Java 配列

Java 面向オブジェクト(I)

Java 面向オブジェクト(II)

Java 面向オブジェクト(III)

Java 異常処理

Java リスト(List)

Java Queue(キュー)

Java Mapコレクション

Java Setコレクション

Java Input/Output(I/O)/O)

Java Reader/Writer

Javaの他のトピック

Java ArrayDeque

このチュートリアルでは、サンプルを通じてArrayDequeクラスおよびそのメソッドを学びます。また、ArrayDequeを使用してスタックを実現することも学びます。

Javaでは、ArrayDequeクラスを使用してキューおよびデュアルキューデータ構造を実現するために配列を使用できます。

ArrayDequeで実装されたインターフェース

ArrayDequeクラスはこれらのインターフェースを実装しています:

ArrayDequeを作成します

ArrayDequeデュアルキューを作成するために、java.util.ArrayDequeパッケージをインポートする必要があります。

JavaでArrayDequeデュアルキューを作成する方法は以下の通りです:

ArrayDeque<Type> animal = new ArrayDeque<>();

ここでは、TypeはArrayDequeデュアルキューのタイプを表します。例えば、

//文字列型ArrayDequeを作成します
ArrayDeque<String> animals = new ArrayDeque<>();
//整数型ArrayDequeを作成します
ArrayDeque<Integer> age = new ArrayDeque<>();

ArrayDequeメソッド

ArrayDequeクラスはQueueおよびDequeインターフェースに存在するすべてのメソッドを提供します

要素を挿入します

1.add()、addFirst()およびaddLast()を使用して要素を追加します

  • add() - 指定された要素をArrayDequeダブルエンドキューの末尾に挿入します

  • addFirst() -指定された要素をArrayDequeデュアルキューの先頭に挿入します

  • addLast() - 指定された内容をArrayDequeデュアルキューの末尾に挿入します(add()に等しい)

注意:ArrayDequeデュアルキューがいっぱいであれば、これらのすべてのメソッドadd()、addFirst()およびaddLast()がIllegalStateExceptionを発生させます。

例えば、

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals= new ArrayDeque<>();
        //add()を使用します
        animals.add("Dog");
        //addFirst()を使用します
        addFirst()を使用します
        //addLast()を使用します
        animals.addLast("Horse");
        System.out.println("ArrayDeque: " + animals);
    }
}

出力結果

ArrayDeque: [Cat, Dog, Horse]

2.offer()、offerFirst()およびofferLast()を使用して要素を挿入します

  • offer() - 指定された要素をArrayDequeダブルエンドキューの末尾に挿入します

  • offerFirst() - 指定された要素をArrayDequeダブルエンドキューの先頭に挿入します

  • offerLast() - 指定された要素をArrayDequeダブルエンドキューの末尾に挿入します

注意: offer()、offerFirst()およびofferLast()は要素の挿入に成功したかどうかをtrueで返します;それ以外の場合、何も返しません。ArrayDequeダブルエンドキューが満員の場合、これらのメソッドはfalseを返します。

例えば、

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals= new ArrayDeque<>();
        //offer()を使用
        animals.offer("Dog");
        //offerFirst()を使用
        animals.offerFirst("Cat");
        //offerLast()を使用
        animals.offerLast("Horse");
        System.out.println("ArrayDeque: " + animals);
    }
}

出力結果

ArrayDeque: [Cat, Dog, Horse]

ArrayDeque要素にアクセス

1.getFirst()とgetLast()を使用して要素にアクセスします

  • getFirst() - ArrayDequeダブルエンドキューの最初の要素を返します

  • getLast() - ArrayDequeダブルエンドキューの最後の要素を返します

注:ArrayDequeダブルエンドキューが空の場合、getFirst()とgetLast()はNoSuchElementExceptionをスローします。

例えば、

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals= new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        // 最初の要素を取得
        String firstElement = animals.getFirst();
        最初の要素: + firstElement);
        //最後の要素を取得
        String lastElement = animals.getLast();
        最後の要素: + lastElement);
    }
}

出力結果

ArrayDeque: [Dog, Cat, Horse]
最初の要素: Dog
最後の要素: Horse

2.peek()、peekFirst()、peekLast()メソッドを使用して要素にアクセスします

  • peek() - ArrayDequeダブルエンドキューの最初の要素を返します

  • peekFirst() - ArrayDequeダブルエンドキューの最初の要素を返します(peek()に等価)

  • peekLast() - ArrayDequeダブルエンドキューの最後の要素を返します

例えば、

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals= new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        //peek()を使用
        String element = animals.peek();
        ヘッダー要素: + element);
        //peekFirst()を使用()
        String firstElement = animals.peekFirst();
        最初の要素: + firstElement);
        //peekLastを使用
        String lastElement = animals.peekLast();
        最後の要素: + lastElement);
    }
}

出力結果

ArrayDeque: [Dog, Cat, Horse]
Head Element: Dog
最初の要素: Dog
最後の要素: Horse

注意:ArrayDequeのダブルエンドキューが空の場合、peek()、peekFirst()、getLast()はNoSuchElementExceptionをスローします。

ArrayDeque要素を削除します

1.remove()、removeFirst()、removeLast()メソッドを使用して要素を削除します

  • remove() - ArrayDequeのダブルエンドキューの最初の要素から1つの要素を削除します

  • remove(element) - ArrayDequeのダブルエンドキューの先頭から指定された要素を返し、削除します

  • removeFirst() - ArrayDequeのダブルエンドキューの最初の要素を返し、削除します(remove()と同義)

  • removeLast() - ArrayDequeのダブルエンドキューの最後の要素を返し、削除します

注意:ダブルエンドキューが空の場合、remove()、removeFirst()、removeLast()メソッドは例外を発生させます。また、要素を見つけられない場合、remove(element)は例外を発生させます。

例えば、

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals= new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Cow");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        //remove()を使用します
        String element = animals.remove();
        System.out.println("削除Element: " + element);
        System.out.println("新しいArrayDeque: " + animals);
        //removeFirst()を使用します
        String firstElement = animals.removeFirst();
        System.out.println("削除最初の要素: " + firstElement);
        //removeLast()を使用します
        String lastElement = animals.removeLast();
        System.out.println("削除最後の要素: " + lastElement);
    }
}

出力結果

ArrayDeque: [Dog, Cat, Cow, Horse]
削除Element: Dog
新しいArrayDeque: [Cat, Cow, Horse]
最初の要素: Cat
最後の要素: Horse

2.poll()、pollFirst()、pollLast()メソッドを使用して要素を削除します

  • poll() - ArrayDequeのダブルエンドキューの最初の要素を返し、削除します

  • pollFirst() - ArrayDequeのダブルエンドキューの最初の要素を返し、削除します(poll()と同義)

  • pollLast() - ArrayDequeのダブルエンドキューの最後の要素を返し、削除します

注意:ArrayDequeのダブルエンドキューが空の場合、要素を見つけられない場合、poll()、pollFirst()、pollLast()はnullを返します。

例えば、

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals= new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Cow");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        //poll()を使用します
        String element = animals.poll();
        System.out.println("削除Element: " + element);
        System.out.println("新しいArrayDeque: " + animals);
        //pollFirst()を使用します
        String firstElement = animals.pollFirst();
        System.out.println("削除最初の要素: " + firstElement);
        //pollLast()を使用します
        String lastElement = animals.pollLast();
        System.out.println("削除最後の要素: " + lastElement);
    }
}

出力結果

ArrayDeque: [Dog, Cat, Cow, Horse]
削除Element: Dog
新しいArrayDeque: [Cat, Cow, Horse]
最初の要素: Cat
最後の要素: Horse

3.要素の削除:clear()メソッドを使用します

ArrayDequeデュアルエンドキューから全ての要素を削除するには、clear()メソッドを使用します。例えば、

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals= new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.println("ArrayDeque: " + animals);
        //clear()を使用します
        animals.clear();
        System.out.println("新しいArrayDeque: " + animals);
    }
}

出力結果

ArrayDeque: [Dog, Cat, Horse]
新しいArrayDeque: []

ArrayDequeを巡回する

  • iterator() - ArrayDequeデュアルエンドキューを巡回するためのイテレータを返却します

  • descendingIterator() -返却するイテレータは、ArrayDequeデュアルエンドキューを逆順で巡回するために使用できます

为了使用这些方法,我们必须导入java.util.Iteratorパッケージ。例えば、

import java.util.ArrayDeque;
import java.util.Iterator;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals= new ArrayDeque<>();
        animals.add("Dog");
        animals.add("Cat");
        animals.add("Horse");
        System.out.print("ArrayDeque: ");
        //使用iterator()
        Iterator<String> iterate = animals.iterator();
        while(iterate.hasNext()) {
            System.out.print(iterate.next());
            System.out.print(", ");
        }
        System.out.print("\n反向ArrayDeque: ");
        //descendingIterator()を使用します
        Iterator<String> desIterate = animals.descendingIterator();
        while(desIterate.hasNext()) {
            System.out.print(desIterate.next());
            System.out.print(", ");
        }
    }
}

出力結果

ArrayDeque: [Dog, Cat, Horse]
逆順ArrayDeque: [Horse, Cat, Dog]

他のメソッド

メソッド内容説明
element()ArrayDequeダブルエンドキューの先頭から要素を返します。
contains(element)指定された要素をArrayDequeダブルエンドキューで検索します。
要素が見つかった場合trueを、見つからなかった場合falseを返します。
size()ArrayDequeダブルエンドキューの長さを返します。
toArray()ArrayDequeダブルエンドキューを配列に変換し、それを返します。
clone()ArrayDequeダブルエンドキューのコピーを作成し、それを返します。

ArrayDequeをスタックとして

JavaでLIFO(後入先出)スタックを使用する場合、Stackクラス上でダブルエンドキューを使用します。ArrayDequeはStackクラスよりも速いです。

ArrayDequeは以下のメソッドを提供し、スタックを実現できます。

  • push() - スタックのトップに要素を追加します

  • peek() - スタックのトップから要素を返します

  • pop() - 要素を返し、スタックのトップから削除します

例えば、

import java.util.ArrayDeque;
class Main {
    public static void main(String[] args) {
        ArrayDeque<String> stack = new ArrayDeque<>();
        //要素をスタックに追加します
        stack.push("Dog");
        stack.push("Cat");
        stack.push("Horse");
        System.out.println("スタック: " + stack);
        //スタックのトップから要素をアクセスします
        String element = stack.peek();
        System.out.println("アクセス要素: " + element);
        //スタックのトップから要素を削除する
        String remElement = stack.pop();
        System.out.println("削除element: ", + remElement);
    }
}

出力結果

スタック: [Horse, Cat, Dog]
アクセスElement: Horse
削除Element: Horse

ArrayDequeとLinkedListクラス

ArrayDequeとJavaのLinkedListはDequeインターフェースを実装していますが、いくつかの違いがあります。

  • LinkedListは空要素をサポートしていますが、ArrayDequeはサポートしていません。

  • リンクリストの各ノードは他のノードへのリンクを含んでいます。これがLinkedListがArrayDequeよりも多くのストレージスペースが必要な理由です。

  • キューまたはデュプレックスキューデータ構造を実装する場合、ArrayDequeはLinkedListよりも速くなる可能性があります。