English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、サンプルを通じてArrayDequeクラスおよびそのメソッドを学びます。また、ArrayDequeを使用してスタックを実現することも学びます。
Javaでは、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クラスは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]
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をスローします。
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: []
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ダブルエンドキューのコピーを作成し、それを返します。 |
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とJavaのLinkedListはDequeインターフェースを実装していますが、いくつかの違いがあります。
LinkedListは空要素をサポートしていますが、ArrayDequeはサポートしていません。
リンクリストの各ノードは他のノードへのリンクを含んでいます。これがLinkedListがArrayDequeよりも多くのストレージスペースが必要な理由です。
キューまたはデュプレックスキューデータ構造を実装する場合、ArrayDequeはLinkedListよりも速くなる可能性があります。