キュー
キューキュー紹介
キューは、キューShajiaoをシミュレートするために使用されていますか?チームを入力する後列、およびバック賃金でチームトーク後のチームの前で他の人々 ;キューには、チェックアウトの最初の法案と休暇を支払うためにルーティングされた最初のチームへのライン、としてキュー手段、です。沿って“先进先出FIFO”
、ルール、それはリニアテーブルです。一方の端部に挿入され、他端が削除されます。エンキュー(offer
尾)で、デキュー(poll
最初のチームで)。そこキューインタフェース実装PriorityQueueクラス、別のデックのインターフェイスのDeque。
キューキュー概略図アウト
キューの一般的な方法
優先度つきキューは、所有しているQueue
とCollection
する方法。以下は、一般的に使用される方法のいくつかを説明します。
boolean add(E e);
:キューの末尾に指定された要素を追加します。E element();
:キューの要素の頭を取得しますが、要素を削除しません。boolean offer(E e);
:キューの末尾に指定された要素を追加します。E peek();
:キューの要素の頭を取得しますが、要素を削除しません。キューが空の場合、返品のヌル。E poll();
:キューの要素の頭を取得し、その要素を削除します。キューが空の場合、nullを返しますが。E remove();
:キューの要素の頭を取得し、その要素を削除します。キューが空の場合は、例外をスローします。
優先度つきキュー
優先度つきキューの概要
優先度つきキューキューキュー実装クラスであり、格納順序優先度つきキュー待ち行列要素が順にキューに追加されるのではなく、サイズキュー要素によって再ソート。呼び出すときpeek()
、またはpoll()
ときではなくキュー要素の最初のよりも、キューの最小の要素を取得し、取得のキュー要素法。少し反先入先出规则
。
例優先度つきキュー
1)主なカテゴリを実行します。
public class DemoApplication {
public static void main(String[] args) {
PriorityQueue priorityQueue = new PriorityQueue();
priorityQueue.offer(5);
priorityQueue.offer(-1);
priorityQueue.offer(3);
priorityQueue.offer(7);
//查看入队顺序
System.out.println("队列输出:" + priorityQueue);
//peek方法获取队头元素但是不删除元素
System.out.println("peek()方法获取队头:" + priorityQueue.peek());
//查看第一个元素即为最小元素
System.out.println("第一个队列元素出队:" + priorityQueue.poll());
System.out.println("第二个队列元素出队:" + priorityQueue.poll());
System.out.println("第三个队列元素出队:" + priorityQueue.poll());
System.out.println("第四个队列元素出队:" + priorityQueue.poll());
System.out.println("null队列:" + priorityQueue.poll());
}
}
复制代码
2)実行結果:
队列输出:[-1, 5, 3, 7]
peek()方法获取队头:-1
第一个队列元素出队:-1
第二个队列元素出队:3
第三个队列元素出队:5
第四个队列元素出队:7
null队列:null
复制代码
と
はじめのDeque両端キュー
両端キューは、キューサブインタフェースです双端队列
。削除要素は、両端(頭部およびキューの末尾)から同時に追加することができます。スタックデータ構造を実装するために使用することができます。そこ2つのクラスが実装されている(ArrayDeque
とLinkedList
)
両端キューの一般的な方法
void addFirst(E e)
:指定された要素の両端キューの挿入ヘッド、以下でより重要な、多くの方法)は、(例えばofferFirstとして、これを達成するために、内部に挿入されたヘッド部分によって達成されます。void addLast(E e)
:挿入両端キューの末尾に指定された要素。より重要な、以下では、offerLastととして()これをすることによって達成される達成するために、内部に挿入された端部に付加されます。E getFirst()
:取得しますが、最初の要素の両端キューを削除しません。E getLast()
:取得しますが、最後の要素の両端キューを削除しません。E removeFirst()
:取得し、両端キューの最初の要素を削除します。キュースタックポップの方法は、()メソッドによって達成されます。E removeLast()
:両端キューの最後の要素を取得し、削除します。Iterator<E> descendingIterator()
:逆の順序で両端キューイテレータ、繰り返し要素を返します。boolean offerFirst(E e)
:指定された要素の両端キューの挿入ヘッド。
public boolean offerFirst(E e) {
addFirst(e);
return true;
}
复制代码
boolean offerLast(E e)
:挿入両端キューの末尾に指定された要素。
public boolean offerLast(E e) {
addLast(e);
return true;
}
复制代码
E peekFirst()
:最初の要素を取得しますが、両端キューを削除しません。キューが空、またはnullの場合。
public E peekFirst() {
final Node<E> f = first;
return (f == null) ? null : f.item;
}
复制代码
E peekLast()
:ゲットしかし両端キューの最後の要素を削除しません。キューが空、またはnullの場合。
public E peekLast() {
final Node<E> l = last;
return (l == null) ? null : l.item;
}
复制代码
E pollFirst()
:両端キューの最初の要素を取得し、削除し、キューが空の場合は、nullが返されます。
public E pollFirst() {
final Node<E> f = first;
return (f == null) ? null : unlinkFirst(f);
}
复制代码
E pollLast()
:両端キューの最後の要素を取得し、削除し、キューが空の場合は、nullが返されます。
public E pollLast() {
final Node<E> l = last;
return (l == null) ? null : unlinkLast(l);
}
复制代码
E pop()
:方法スタック、スタックの両端キュートップ素子の飛び出しは、removeFirstと()メソッドと同等です。
public E pop() {
return removeFirst();
}
复制代码
void push(E e)
:スタック方法は、プッシュ要素は、スタックの上部がaddFist()メソッドと同等の両端キュースタックを表し入ります。
public void push(E e) {
addFirst(e);
}
复制代码
boolean removeFirstOccurrence(Object o)
:両端キューが要素0の最初の発生を削除し、基礎となる方法を削除することによって実現されます()。
public boolean removeFirstOccurrence(Object o) {
return remove(o);
}
复制代码
boolean removeLastOccurrence(Object o)
:最後に出現oを短いリンスキューの要素を削除します。
ArrayDeque
ArrayDeque概要
ArrayDeque実装がArrayListに類似しており、動的であり、オブジェクトによって割り当てることができる[]アレイコレクション要素は、アレイの容量を超えた場合に、記憶素子を実現するためには、配列要素の新しいセットを格納するように再割り当てされます。
例ArrayDeque
1)を実行し、メイン
public class DemoApplication {
public static void main(String[] args) {
//可以作为栈来使用,先进后出
ArrayDeque<String> arrayDeque = new ArrayDeque<>();
arrayDeque.push("book01");
arrayDeque.push("book03");
arrayDeque.push("book02");
arrayDeque.push("book04");
System.out.println("原栈:" + arrayDeque);
System.out.println("获取头部元素,但不删除该元素,peek(): " + arrayDeque.peek());
System.out.println("获取头部元素,且删除该元素,pop(): " +arrayDeque.pop());
System.out.println("获取第一个元素,但不删除:" + arrayDeque.getFirst());
System.out.println("获取最后一个元素,但不删除:" + arrayDeque.getLast());
System.out.println("在双端队列头部插入元素:" + arrayDeque.offerFirst("booknew01"));
System.out.println("在双端队列尾部插入元素:" + arrayDeque.offerLast("booknew02"));
System.out.println("新栈:" + arrayDeque);
}
}
复制代码
2)実行結果
原栈:[book04, book02, book03, book01]
获取头部元素,但不删除该元素: book04
获取头部元素,且删除该元素: book04
获取第一个元素,但不删除:book02
获取最后一个元素,但不删除:book01
true
true
新栈:[booknew01, book02, book03, book01, booknew02]
复制代码
LinkedListの
LinkedListの概要
リストLinkedListのは実現するだけでなく、ある両端キューを達成するために、両端キューとして使用することができ、それが「スタック」または「キュー」の使用として使用することができます。そして、ArrayListをLinkedListのは、基本的な実装ArrayDequeことを除いて、リストのLinkedListの基礎となる要素は、の形式で保存されている随机访问性能比较差
、しかし插入
、删除
とき性能比较好
(のみのライン上のアドレスポインタを変更する必要があります)
Q&A
類似点と相違点は、(PEEK)と要素()の
- 付:PEEK()および要素()は除去せずに返すために最初のチームです。
- ISO感度:キューにあるPEEK()メソッドが返すのはnullが空である、要素は()例外はNoSuchElementExceptionがスローされます。
類似点と相違点の世論調査()とのremove()の
- 付:世論調査()とのremove()削除され、戻り、すべてのチームが向かいます。
- 異なる:世論調査()は、キュー内のヌルが空で返し、削除()例外はNoSuchElementExceptionがスローされます。
キューとスタックの違いは?
キュー
- キュー
先进先出FIFO
要素の動作原理。 - すべてのキューのみ、リニアテーブルは、テーブルの他の終了時に削除されているテーブルに挿入され一端に定義されています。
- 表は、チームがヘッドエンドを削除することができ、テールエンドの挿入を可能にしました。
スタック 4スタックは、特別な直線状である后进先出LIFO
構造; 5.スタックはテーブルの端部であるテーブルリニアのみ挿入および削除操作所定のテーブルの第一の端部である栈顶
、スタックの底部と呼ばれる最初のテーブル。前記スタックは、物理ストレージの順次記憶構造に精通してもよい、鎖状構造で格納することができます。