<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Java `PriorityQueue` > 原文: [https://www.programiz.com/java-programming/priorityqueue](https://www.programiz.com/java-programming/priorityqueue) #### 在本教程中,我們將借助示例學習 Java 集合框架的`PriorityQueue`類。 `PriorityQueue`類提供[堆數據結構](/dsa/heap-data-structure "Heap data structure")的功能。 它實現了[`Queue`接口](/java-programming/queue "Java Queue Interface")。 ![The Java PriorityQueue class implements the Queue interface.](https://img.kancloud.cn/ee/7f/ee7f7fa066e17454beb27c168b7dc45b_376x558.png) 與普通隊列不同,優先級隊列元素是按排序順序檢索的。 假設我們要按升序檢索元素。 在這種情況下,優先級隊列的頭部將是最小的元素。 一旦檢索到此元素,下一個最小的元素將是隊列的開頭。 重要的是要注意,優先級隊列的元素可能未排序。 但是,元素總是按排序順序檢索。 * * * ## 創建`PriorityQueue` 為了創建優先級隊列,我們??必須導入`java.util.PriorityQueue`包。 導入包后,可以使用以下方法在 Java 中創建優先級隊列。 ```java PriorityQueue<Integer> numbers = new PriorityQueue<>(); ``` 在這里,我們創建了一個沒有任何參數的優先級隊列。 在這種情況下,優先級隊列的頭部是隊列的最小元素。 并且元素以升序從隊列中刪除。 但是,我們可以在`Comparator`接口的幫助下自定義元素的順序。 我們將在本教程的后面部分中對此進行了解。 * * * ## `PriorityQueue`方法 `PriorityQueue`類提供`Queue`接口中存在的所有方法的實現。 * * * ## 將元素插入`PriorityQueue` * `add()` - 將指定的元素插入隊列。 如果隊列已滿,則會引發異常。 * `offer()` - 將指定的元素插入隊列。 如果隊列已滿,則返回`false`。 例如, ```java import java.util.PriorityQueue; class Main { public static void main(String[] args) { // Creating a priority queue PriorityQueue<Integer> numbers = new PriorityQueue<>(); // Using the add() method numbers.add(4); numbers.add(2); System.out.println("PriorityQueue: " + numbers); // Using the offer() method numbers.offer(1); System.out.println("Updated PriorityQueue: " + numbers); } } ``` **輸出** ```java PriorityQueue: [2, 4] Updated PriorityQueue: [1, 4, 2] ``` 在這里,我們創建了一個名為`number`的優先級隊列。 我們已將 4 和 2 插入隊列。 盡管在 2 之前插入了 4,但是隊列的頭是 2。這是因為優先級隊列的頭是隊列的最小元素。 然后,我們將 1 插入隊列。 現在重新排列了隊列,以將最小的元素 1 存儲到隊列的開頭。 * * * ## 訪問`PriorityQueue`元素 要從優先級隊列訪問元素,我們可以使用`peek()`方法。 此方法返回隊列的開頭。 例如, ```java import java.util.PriorityQueue; class Main { public static void main(String[] args) { // Creating a priority queue PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the peek() method int number = numbers.peek(); System.out.println("Accessed Element: " + number); } } ``` **輸出**: ```java PriorityQueue: [1, 4, 2] Accessed Element: 1 ``` * * * ## 刪除`PriorityQueue`元素 * `remove()` - 從隊列中刪除指定的元素 * `poll()` - 返回并刪除隊列的開頭 例如: ```java import java.util.PriorityQueue; class Main { public static void main(String[] args) { // Creating a priority queue PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.println("PriorityQueue: " + numbers); // Using the remove() method boolean result = numbers.remove(2); System.out.println("Is the element 2 removed? " + result); // Using the poll() method int number = numbers.poll(); System.out.println("Removed Element Using poll(): " + number); } } ``` **輸出**: ```java PriorityQueue: [1, 4, 2] Is the element 2 removed? true Removed Element Using poll(): 1 ``` * * * ## 遍歷`PriorityQueue` 要遍歷優先級隊列的元素,我們可以使用`iterator()`方法。 為了使用此方法,我們必須導入`java.util.Iterator`包。 例如, ```java import java.util.PriorityQueue; import java.util.Iterator; class Main { public static void main(String[] args) { // Creating a priority queue PriorityQueue<Integer> numbers = new PriorityQueue<>(); numbers.add(4); numbers.add(2); numbers.add(1); System.out.print("PriorityQueue using iterator(): "); //Using the iterator() method Iterator<Integer> iterate = numbers.iterator(); while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } } ``` **輸出**: ```java PriorityQueue using iterator(): 1, 4, 2, ``` * * * ## 其他`PriorityQueue`方法 | 方法 | 內容描述 | | --- | --- | | `contains(element)` | 在優先級隊列中搜索指定的元素。 如果找到該元素,則返回`true`,否則返回`false`。 | | `size()` | 返回優先級隊列的長度。 | | `toArray()` | 將優先級隊列轉換為數組并返回它。 | * * * ## `PriorityQueue`比較器 在以上所有示例中,優先級隊列元素都是按自然順序(升序)檢索的。 但是,我們可以自定義此排序。 為此,我們需要創建自己的比較器類來實現`Comparator`接口。 例如, ```java import java.util.PriorityQueue; import java.util.Comparator; class Main { public static void main(String[] args) { // Creating a priority queue PriorityQueue<Integer> numbers = new PriorityQueue<>(new CustomComparator()); numbers.add(4); numbers.add(2); numbers.add(1); numbers.add(3); System.out.print("PriorityQueue: " + numbers); } } class CustomComparator implements Comparator<Integer> { @Override public int compare(Integer number1, Integer number2) { int value = number1.compareTo(number2); // elements are sorted in reverse order if (value > 0) { return -1; } else if (value < 0) { return 1; } else { return 0; } } } ``` **輸出**: ```java PriorityQueue: [4, 3, 1, 2] ``` 在上面的示例中,我們創建了一個優先級隊列,將`CustomComparator`類作為參數傳遞。 `CustomComparator`類實現`Comparator`接口。 然后,我們覆蓋`compare()`方法。 現在,該方法使元素的頭成為最大數量。 要了解有關比較器的更多信息,請訪問 [Java Comparator](https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html) 。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看