詳述ジャワ・キューキュー(のDeque /優先度つきキュー/のDeque / ArrayDeque / LinkedListの)

キュー

キューキュー紹介

  キューは、キューShajiaoをシミュレートするために使用されていますか?チームを入力する後列、およびバック賃金でチームトーク後のチームの前で他の人々 ;キューには、チェックアウトの最初の法案と休暇を支払うためにルーティングされた最初のチームへのライン、としてキュー手段、です。沿って“先进先出FIFO”、ルール、それはリニアテーブルです。一方の端部に挿入され、他端が削除されます。エンキュー(offer尾)で、デキュー(poll最初のチームで)。そこキューインタフェース実装PriorityQueueクラス、別のデックのインターフェイスのDeque。

キューキュー概略図アウト

キューの概略アウト

キューの一般的な方法

  優先度つきキューは、所有しているQueueCollectionする方法。以下は、一般的に使用される方法のいくつかを説明します。

  • 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つのクラスが実装されている(ArrayDequeLinkedList

両端キューの一般的な方法

  • 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がスローされます。

キューとスタックの違いは?

キュー

  1. キュー先进先出FIFO要素の動作原理。
  2. すべてのキューのみ、リニアテーブルは、テーブルの他の終了時に削除されているテーブルに挿入され一端に定義されています。
  3. 表は、チームがヘッドエンドを削除することができ、テールエンドの挿入を可能にしました。

スタック 4スタックは、特別な直線状である后进先出LIFO構造; 5.スタックはテーブルの端部であるテーブルリニアのみ挿入および削除操作所定のテーブルの第一の端部である栈顶、スタックの底部と呼ばれる最初のテーブル。前記スタックは、物理ストレージの順次記憶構造に精通してもよい、鎖状構造で格納することができます。

おすすめ

転載: juejin.im/post/5e8c4293e51d454719460e3a