亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

Java ArrayDeque

Java ArrayDeque

在本教程中,我们将借助示例了解 ArrayDeque 类及其方法。另外,我们将学习使用数组双端队列来实现堆栈。

在 Java 中,我们可以使用 ArrayDeque 使用数组实现队列和双端队列数据结构的类。


ArrayDeque 实现的接口

ArrayDeque 类实现了这两个接口:


创建 ArrayDeque

为了创建一个数组双端队列,我们​​必须导入 java.util.ArrayDeque 包。

下面是我们如何在 Java 中创建数组双端队列:

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

在这里,类型 指示数组双端队列的类型。例如,

// 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() 抛出 IllegalStateException .

例如,

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);
    }
}

输出

ArrayDeque: [Cat, Dog, Horse]

2。使用 offer()、offerFirst() 和 offerLast() 插入元素

注意: offer() , offerFirst()offerLast() 返回 true 如果元素被成功插入;如果数组双端队列已满,这些方法返回 false .

例如,

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);
    }
}

输出

ArrayDeque: [Cat, Dog, Horse]

注意: 如果数组双端队列已满


访问 ArrayDeque 元素

1。使用 getFirst() 和 getLast() 访问元素

注意: 如果数组双端队列为空,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);

        // 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);
    }
}

输出

ArrayDeque: [Dog, Cat, Horse]
First Element: Dog
Last Element: Horse

2。使用 peek()、peekFirst() 和 peekLast() 方法访问元素

例如,

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);
    }
}

输出

ArrayDeque: [Dog, Cat, Horse]
Head Element: Dog
First Element: Dog
Last Element: Horse

注意: 如果数组双端队列为空,peek() , peekFirst()getLast() 抛出 NoSuchElementException .


删除 ArrayDeque 元素

1。使用 remove()、removeFirst()、removeLast() 方法删除元素

注意: 如果数组双端队列为空,remove() , removeFirst()removeLast() 方法抛出异常。另外,remove(element) 如果找不到该元素,则抛出异常。

例如,

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);
    }
}

输出

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()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);

        // 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);
    }
}

输出

ArrayDeque: [Dog, Cat, Cow, Horse]
Removed Element: Dog
New ArrayDeque: [Cat, Cow, Horse]
Removed First Element: Cat
Removed Last Element: Horse

3。移除元素:使用 clear() 方法

要从数组双端队列中删除所有元素,我们使用 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);

        // Using clear()
        animals.clear();

        System.out.println("New ArrayDeque: " + animals);
    }
}

输出

ArrayDeque: [Dog, Cat, Horse]
New ArrayDeque: []

迭代 ArrayDeque

为了使用这些方法,我们必须导入 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: ");

        // 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(", ");
        }
    }
}

输出

ArrayDeque: [Dog, Cat, Horse]
ArrayDeque in reverse order: [Horse, Cat, Dog]

其他方法

方法 说明
element() 从数组双端队列的头部返回一个元素。
contains(element) 在数组双端队列中搜索指定元素。
如果找到该元素,则返回 true ,如果不是,则返回 false .
size() 返回数组双端队列的长度。
toArray() 将数组双端队列转换为数组并返回。
clone() 创建数组双端队列的副本并返回它。

ArrayDeque 作为堆栈

实施LIFO(后进先出) Java 中的堆栈,建议在 Stack 类上使用双端队列。 ArrayDeque 类可能比 Stack 更快 类。

ArrayDeque 提供以下可用于实现堆栈的方法。

例如,

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);
    }
}

输出

Stack: [Horse, Cat, Dog]
Accessed Element: Horse
Removed Element: Horse

ArrayDeque Vs.链表类

两者都是 ArrayDeque Java LinkedList 实现了 Deque 界面。但是,它们之间存在一些差异。


java

  1. Java 运算符
  2. Java 评论
  3. Java if...else 语句
  4. Java for-each 循环
  5. Java break 语句
  6. Java 字符串
  7. Java 接口
  8. Java 匿名类
  9. Java try-with-resources
  10. Java 注释
  11. Java 断言
  12. Java 向量