<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Java `ArrayDeque` > 原文: [https://www.programiz.com/java-programming/arraydeque](https://www.programiz.com/java-programming/arraydeque) #### 在本教程中,我們將借助示例學習`ArrayDeque`類及其方法。 此外,我們還將學習使用數組雙端隊列來實現棧。 在 Java 中,我們可以使用`ArrayDeque`類使用數組實現隊列和雙端隊列數據結構。 * * * ## 由`ArrayDeque`實現的接口 `ArrayDeque`類實現以下兩個接口: * [Java `Queue`接口](https://www.programiz.com/java-programming/queue "Java Queue Interface") * [Java `Deque`接口](https://www.programiz.com/java-programming/deque "Java Deque Interface") ![ArrayDeque in Java implements two interfaces: Queue and Deque](https://img.kancloud.cn/54/6a/546abc03d884ce7e24302bd09a29c77e_1200x381.png) * * * ## 創建`ArrayDeque` 為了創建數組雙端隊列,我們??必須導入`java.util.ArrayDeque`包。 這是我們可以用 Java 創建數組雙端隊列的方法: ```java ArrayDeque<Type> animal = new ArrayDeque<>(); ``` 在此,`Type`表示數組雙端隊列的類型。 例如, ```java // Creating String type ArrayDeque ArrayDeque<String> animals = new ArrayDeque<>(); // Creating Integer type ArrayDeque ArrayDeque<Integer> age = new ArrayDeque<>(); ``` * * * ## `ArrayDeque`方法 `ArrayDeque`類提供了`Queue`和`Deque`接口中存在的所有方法的實現。 * * * ### 將元素插入雙端隊列 **1.使用`add()`,`addFirst()`和`addLast()`添加元素** * `add()` - 在數組雙端隊列的末尾插入指定的元素 * `addFirst()` - 將指定的元素插入數組雙端隊列的開頭 * `addLast()` - 在數組雙端隊列的末尾插入指定的內容(相當于`add()`) **注意**:如果數組雙端隊列已滿,則所有這些方法`add()`,`addFirst()`和`addLast()`都會拋出`IllegalStateException`。 例如, ```java import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); // Using add() animals.add("Dog"); // Using addFirst() animals.addFirst("Cat"); // Using addLast() animals.addLast("Horse"); System.out.println("ArrayDeque: " + animals); } } ``` **輸出** ```java ArrayDeque: [Cat, Dog, Horse] ``` **2.使用`offer()`,`offerFirst()`和`offerLast()`插入元素** * `offer()` - 在數組雙端隊列的末尾插入指定的元素 * `offerFirst()` - 將指定的元素插入數組雙端隊列的開頭 * `offerLast()` - 在數組雙端隊列的末尾插入指定的元素 **注意:如果成功插入元素**,則`offer()`,`offerFirst()`和`offerLast()`返回`true`; 如果數組雙端隊列已滿,則這些方法返回`false`。 例如: ```java import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> animals= new ArrayDeque<>(); // Using offer() animals.offer("Dog"); // Using offerFirst() animals.offerFirst("Cat"); // Using offerLast() animals.offerLast("Horse"); System.out.println("ArrayDeque: " + animals); } } ``` **輸出**: ```java ArrayDeque: [Cat, Dog, Horse] ``` **注意**:如果數組雙端隊列已滿 * `add()`方法將引發異常 * `offer()`方法返回`false` * * * ### 訪問`ArrayDeque`元素 **1.使用`getFirst()`和`getLast()`訪問元素** * `getFirst()` - 返回數組雙端隊列的第一個元素 * `getLast()` - 返回數組雙端隊列的最后一個元素 **注意**:如果數組雙端隊列為空,則`getFirst()`和`getLast()`拋出`NoSuchElementException`。 例如: ```java 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); // Get the first element String firstElement = animals.getFirst(); System.out.println("First Element: " + firstElement); // Get the last element String lastElement = animals.getLast(); System.out.println("Last Element: " + lastElement); } } ``` **輸出**: ```java ArrayDeque: [Dog, Cat, Horse] First Element: Dog Last Element: Horse ``` **2.使用`peek()`,`peekFirst()`和`peekLast()`方法訪問元素** * `peek()` - 返回數組雙端隊列的第一個元素 * `peekFirst()` - 返回數組雙端隊列的第一個元素(相當于`peek()`) * `peekLast()` - 返回數組雙端隊列的最后一個元素 例如: ```java 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); // Using peek() String element = animals.peek(); System.out.println("Head Element: " + element); // Using peekFirst() String firstElement = animals.peekFirst(); System.out.println("First Element: " + firstElement); // Using peekLast String lastElement = animals.peekLast(); System.out.println("Last Element: " + lastElement); } } ``` **輸出**: ```java ArrayDeque: [Dog, Cat, Horse] Head Element: Dog First Element: Dog Last Element: Horse ``` **注意**:如果數組雙端隊列為空,則`peek()`,`peekFirst()`和`getLast()`拋出`NoSuchElementException`。 * * * ### 刪除`ArrayDeque`元素 **1.使用`remove()`,`removeFirst()`和`removeLast()`方法刪除元素** * `remove()` - 從數組雙端隊列的第一個元素中返回并刪除一個元素 * `remove(element)` - 從數組雙端隊列的頭部返回并刪除指定的元素 * `removeFirst()` - 返回并從數組雙端隊列中刪除第一個元素(等效于`remove()`) * `removeLast()` - 返回并刪除數組雙端隊列中的最后一個元素 **注意**:如果數組雙端隊列為空,則`remove()`,`removeFirst()`和`removeLast()`方法將引發異常。 另外,如果找不到該元素,則`remove(element)`會引發異常。 例如: ```java 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); // Using remove() String element = animals.remove(); System.out.println("Removed Element: " + element); System.out.println("New ArrayDeque: " + animals); // Using removeFirst() String firstElement = animals.removeFirst(); System.out.println("Removed First Element: " + firstElement); // Using removeLast() String lastElement = animals.removeLast(); System.out.println("Removed Last Element: " + lastElement); } } ``` **輸出**: ```java ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse ``` **2.使用`poll()`,`pollFirst()`和`pollLast()`方法刪除元素** * `poll()` - 返回并刪除數組雙端隊列的第一個元素 * `pollFirst()` - 返回并刪除數組雙端隊列的第一個元素(相當于`poll()`) * `pollLast()` - 返回并刪除數組雙端隊列的最后一個元素 **注意**:如果數組雙端隊列為空,則如果找不到該元素,則`poll()`,`pollFirst()`和`pollLast()`返回`null`。 例如: ```java 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); // Using poll() String element = animals.poll(); System.out.println("Removed Element: " + element); System.out.println("New ArrayDeque: " + animals); // Using pollFirst() String firstElement = animals.pollFirst(); System.out.println("Removed First Element: " + firstElement); // Using pollLast() String lastElement = animals.pollLast(); System.out.println("Removed Last Element: " + lastElement); } } ``` **輸出**: ```java ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse ``` **3.刪除元素:使用`clear()`方法** 要從數組雙端隊列中刪除所有元素,我們使用`clear()`方法。 例如, ```java 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); // Using clear() animals.clear(); System.out.println("New ArrayDeque: " + animals); } } ``` **輸出**: ```java ArrayDeque: [Dog, Cat, Horse] New ArrayDeque: [] ``` * * * ### 迭代`ArrayDeque` * `iterator()` - 返回可用于遍歷數組雙端隊列的迭代器 * `descendingIterator()` - 返回一個迭代器,該迭代器可用于以相反順序遍歷數組雙端隊列 為了使用這些方法,我們必須導入`java.util.Iterator`包。 例如, ```java 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: "); // Using iterator() Iterator<String> iterate = animals.iterator(); while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } System.out.print("\nArrayDeque in reverse order: "); // Using descendingIterator() Iterator<String> desIterate = animals.descendingIterator(); while(desIterate.hasNext()) { System.out.print(desIterate.next()); System.out.print(", "); } } } ``` **輸出**: ```java ArrayDeque: [Dog, Cat, Horse] ArrayDeque in reverse order: [Horse, Cat, Dog] ``` * * * ## 其他方法 | 方法 | 內容描述 | | --- | --- | | `element()` | 從數組雙端隊列的頭部返回一個元素。 | | `contains(element)` | 在數組雙端隊列中搜索指定的元素。 如果找到該元素,則返回`true`,否則返回`false`。 | | `size()` | 返回數組雙端隊列的長度。 | | `toArray()` | 將數組雙端隊列轉換為數組并返回。 | | `clone()` | 創建數組雙端隊列的副本并返回它。 | * * * ## `ArrayDeque`作為棧 要在 Java 中實現 **LIFO(后進先出)**棧,建議在[棧類](/java-programming/stack "Java Stack Class")上使用雙端隊列。`ArrayDeque`類可能比`Stack`類快。 `ArrayDeque`提供了以下可用于實現棧的方法。 * `push()` - 將元素添加到棧頂部 * `peek()` - 從棧頂部返回一個元素 * `pop()` - 返回并從棧頂部刪除元素 例如: ```java import java.util.ArrayDeque; class Main { public static void main(String[] args) { ArrayDeque<String> stack = new ArrayDeque<>(); // Add elements to stack stack.push("Dog"); stack.push("Cat"); stack.push("Horse"); System.out.println("Stack: " + stack); // Access element from top of stack String element = stack.peek(); System.out.println("Accessed Element: " + element); // Remove elements from top of stack String remElement = stack.pop(); System.out.println("Removed element: " + remElement); } } ``` **輸出**: ```java Stack: [Horse, Cat, Dog] Accessed Element: Horse Removed Element: Horse ``` * * * ## `ArrayDeque`與`LinkedList`類 `ArrayDeque`和 [Java LinkedList](/java-programming/linkedlist "Java LinkedList") 都實現了`Deque`接口。 但是,它們之間存在一些差異。 * `LinkedList`支持`null`元素,而`ArrayDeque`不支持。 * 鏈表中的每個節點都包含指向其他節點的鏈接。 這就是`LinkedList`比`ArrayDeque`需要更多存儲空間的原因。 * 如果要實現隊列或雙端隊列數據結構,則`ArrayDeque`可能比`LinkedList`快。
                  <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>

                              哎呀哎呀视频在线观看