Java 菜鳥(niǎo)教程

Java 流程控制

Java 數(shù)組

Java 面向?qū)ο?I)

Java 面向?qū)ο?II)

Java 面向?qū)ο?III)

Java 異常處理

Java 列表(List)

Java Queue(隊(duì)列)

Java Map集合

Java Set集合

Java 輸入輸出(I/O)

Java Reader/Writer

Java 其他主題

Java ArrayDeque

在本教程中,我們將借助示例來(lái)學(xué)習(xí)ArrayDeque類及其方法。此外,我們還將學(xué)習(xí)使用ArrayDeque來(lái)實(shí)現(xiàn)堆棧。

在Java中,我們可以使用ArrayDeque該類使用數(shù)組來(lái)實(shí)現(xiàn)隊(duì)列和雙端隊(duì)列數(shù)據(jù)結(jié)構(gòu)。

由ArrayDeque實(shí)現(xiàn)的接口

在ArrayDeque類實(shí)現(xiàn)這兩個(gè)接口:

Java中的ArrayDeque實(shí)現(xiàn)了兩個(gè)接口:Queue和Deque

創(chuàng)建ArrayDeque

為了創(chuàng)建ArrayDeque雙端隊(duì)列,我們必須導(dǎo)入java.util.ArrayDeque包。

這是我們可以用Java創(chuàng)建ArrayDeque雙端隊(duì)列的方法:

ArrayDeque<Type> animal = new ArrayDeque<>();

在此,Type表示ArrayDeque雙端隊(duì)列的類型。例如,

//創(chuàng)建字符串類型ArrayDeque
ArrayDeque<String> animals = new ArrayDeque<>();

//創(chuàng)建整數(shù)類型ArrayDeque
ArrayDeque<Integer> age = new ArrayDeque<>();

ArrayDeque方法

ArrayDeque類提供了所有的存在于方法Queue和Deque接口。

將元素插入雙端隊(duì)列

1.使用add(),addFirst()和addLast()添加元素

  • add() - 將指定的元素插入ArrayDeque雙端隊(duì)列的末尾

  • addFirst() -在ArrayDeque雙端隊(duì)列的開(kāi)頭,插入指定的元素

  • addLast() - 在ArrayDeque雙端隊(duì)列的末尾插入指定的內(nèi)容(等效于add())

注意:如果ArrayDeque雙端隊(duì)列已滿,則所有這些方法add(),addFirst()和addLast()都會(huì)引發(fā)IllegalStateException。

例如,

import java.util.ArrayDeque;

class Main {
    public static void main(String[] args) {
        ArrayDeque<String> animals= new ArrayDeque<>();

        //使用add ()
        animals.add("Dog");

        //使用addFirst ()
        animals.addFirst("Cat");

        //使用addLast()
        animals.addLast("Horse");
        System.out.println("ArrayDeque: " + animals);
    }
}

輸出結(jié)果

ArrayDeque: [Cat, Dog, Horse]

2.使用 offer(),offerFirst()和offerLast()插入元素

  • offer() - 將指定的元素插入ArrayDeque雙端隊(duì)列的末尾

  • offerFirst() - 在ArrayDeque雙端隊(duì)列的開(kāi)始處插入指定的元素

  • offerLast() - 將指定的元素插入ArrayDeque雙端隊(duì)列的末尾

注意: offer(),offerFirst()并offerLast()返回true是否成功插入元素;否則,返回。如果ArrayDeque雙端隊(duì)列已滿,則這些方法返回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);
    }
}

輸出結(jié)果

ArrayDeque: [Cat, Dog, Horse]

訪問(wèn)ArrayDeque元素

1.使用getFirst()和getLast()訪問(wèn)元素

  • getFirst() - 返回ArrayDeque雙端隊(duì)列的第一個(gè)元素

  • getLast() - 返回ArrayDeque雙端隊(duì)列的最后一個(gè)元素

注:如果ArrayDeque雙端隊(duì)列為空,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);

        // 獲取第一個(gè)元素
        String firstElement = animals.getFirst();
        System.out.println("第一個(gè)元素: " + firstElement);

        //獲取最后一個(gè)元素
        String lastElement = animals.getLast();
        System.out.println("最后一個(gè)元素: " + lastElement);
    }
}

輸出結(jié)果

ArrayDeque: [Dog, Cat, Horse]
第一個(gè)元素: Dog
最后一個(gè)元素: Horse

2.使用peek(),peekFirst()和peekLast()方法訪問(wèn)元素

  • peek() - 返回ArrayDeque雙端隊(duì)列的第一個(gè)元素

  • peekFirst() - 返回ArrayDeque雙端隊(duì)列的第一個(gè)元素(等效于peek())

  • peekLast() - 返回ArrayDeque雙端隊(duì)列的最后一個(gè)元素

例如,

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();
        System.out.println("頭元素: " + element);

        //使用peekFirst()
        String firstElement = animals.peekFirst();
        System.out.println("第一個(gè)元素: " + firstElement);

        //使用peekLast
        String lastElement = animals.peekLast();
        System.out.println("最后一個(gè)元素: " + lastElement);
    }
}

輸出結(jié)果

ArrayDeque: [Dog, Cat, Horse]
Head Element: Dog
第一個(gè)元素: Dog
最后一個(gè)元素: Horse

注意:如果ArrayDeque雙端隊(duì)列為空,peek(),peekFirst()和getLast()拋出NoSuchElementException。

刪除 ArrayDeque 元素

1.使用remove(),removeFirst(),removeLast()方法刪除元素

  • remove() - 返回并從ArrayDeque雙端隊(duì)列的第一個(gè)元素中刪除一個(gè)元素

  • remove(element) - 返回并從ArrayDeque雙端隊(duì)列的頭部刪除指定的元素

  • removeFirst() - 返回并從ArrayDeque雙端隊(duì)列中刪除第一個(gè)元素(等效于remove())

  • removeLast() - 返回并從ArrayDeque雙端隊(duì)列中刪除最后一個(gè)元素

注意:如果數(shù)組雙端隊(duì)列為空,則remove(),removeFirst()和removeLast()方法將引發(fā)異常。 另外,如果找不到元素,則remove(element)會(huì)引發(fā)異常。

例如,

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("刪除第一個(gè)元素: " + firstElement);

        //使用removeLast()
        String lastElement = animals.removeLast();
        System.out.println("刪除最后一個(gè)元素: " + lastElement);
    }
}

輸出結(jié)果

ArrayDeque: [Dog, Cat, Cow, Horse]
刪除Element: Dog
新的ArrayDeque: [Cat, Cow, Horse]
刪除第一個(gè)元素: Cat
刪除最后一個(gè)元素: Horse

2.使用poll(),pollFirst()和pollLast()方法刪除元素

  • poll() - 返回并刪除ArrayDeque雙端隊(duì)列的第一個(gè)元素

  • pollFirst() - 返回并刪除ArrayDeque雙端隊(duì)列的第一個(gè)元素(等效于poll())

  • pollLast() - 返回并刪除ArrayDeque雙端隊(duì)列的最后一個(gè)元素

注意:如果ArrayDeque雙端隊(duì)列為空,則如果找不到該元素,則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("刪除第一個(gè)元素: " + firstElement);

        //使用pollLast()
        String lastElement = animals.pollLast();
        System.out.println("刪除最后一個(gè)元素: " + lastElement);
    }
}

輸出結(jié)果

ArrayDeque: [Dog, Cat, Cow, Horse]
刪除Element: Dog
新的ArrayDeque: [Cat, Cow, Horse]
刪除第一個(gè)元素: Cat
刪除最后一個(gè)元素: Horse

3.刪除元素:使用clear()方法

要從ArrayDeque雙端隊(duì)列中刪除所有元素,我們使用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);
    }
}

輸出結(jié)果

ArrayDeque: [Dog, Cat, Horse]
新的ArrayDeque: []

迭代遍歷ArrayDeque

  • iterator() - 返回可用于遍歷ArrayDeque雙端隊(duì)列的迭代器

  • descendingIterator() -返回一個(gè)迭代器,該迭代器可用于以相反順序遍歷ArrayDeque雙端隊(duì)列

為了使用這些方法,我們必須導(dǎo)入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(", ");
        }
    }
}

輸出結(jié)果

ArrayDeque: [Dog, Cat, Horse]
反向ArrayDeque: [Horse, Cat, Dog]

其他方法

方法內(nèi)容描述
element()從ArrayDeque雙端隊(duì)列的頭部返回一個(gè)元素。
contains(element)在ArrayDeque雙端隊(duì)列中搜索指定的元素。
如果找到該元素,則返回true,否則返回false。
size()返回ArrayDeque雙端隊(duì)列的長(zhǎng)度。
toArray()將ArrayDeque雙端隊(duì)列轉(zhuǎn)換為數(shù)組并返回。
clone()創(chuàng)建ArrayDeque雙端隊(duì)列的副本并返回它。

ArrayDeque作為堆棧

要在Java中實(shí)現(xiàn)LIFO(后進(jìn)先出)堆棧,建議在Stack類上使用雙端隊(duì)列。該ArrayDeque類比Stack類快。

ArrayDeque 提供了以下可用于實(shí)現(xiàn)堆棧的方法。

  • push() - 在堆棧頂部添加一個(gè)元素

  • peek() - 從堆棧頂部返回一個(gè)元素

  • pop() - 返回并從堆棧頂部刪除元素

例如,

import java.util.ArrayDeque;

class Main {
    public static void main(String[] args) {
        ArrayDeque<String> stack = new ArrayDeque<>();

        //將元素添加到stack
        stack.push("Dog");
        stack.push("Cat");
        stack.push("Horse");
        System.out.println("Stack: " + stack);

        //從堆棧頂部訪問(wèn)元素
        String element = stack.peek();
        System.out.println("訪問(wèn)元素: " + element);

        //從堆棧頂部刪除元素
        String remElement = stack.pop();
        System.out.println("刪除element: " + remElement);
    }
}

輸出結(jié)果

Stack: [Horse, Cat, Dog]
訪問(wèn)元素: Horse
刪除Element: Horse

ArrayDeque與 LinkedList類

ArrayDeque和Java的LinkedList都實(shí)現(xiàn)了Deque接口。但是,它們之間存在一些差異。

  • LinkedList支持空元素,而ArrayDeque不支持。

  • 鏈表中的每個(gè)節(jié)點(diǎn)都包含到其他節(jié)點(diǎn)的鏈接。這就是LinkedList比ArrayDeque需要更多存儲(chǔ)空間的原因。

  • 如果要實(shí)現(xiàn)隊(duì)列或雙端隊(duì)列數(shù)據(jù)結(jié)構(gòu),則ArrayDeque可能比LinkedList快。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清