Java Deque接口及示例

Java Deque接口及示例

java.util包中的 Deque 接口是队列接口的一个子类型。Deque与双端队列有关,支持从数据结构的任何一端添加或删除元素。它既可以作为一个队列(先进先出/FIFO),也可以作为一个堆栈(后进先出/LIFO)使用。Deque是双端队列的首字母缩写。

Java中的Deque接口及示例

语法: deque接口被声明为。

public interface Deque extends Queue

创建Deque对象 因为Deque是一个接口,所以不能创建deque类型的对象。我们总是需要一个扩展这个列表的类来创建一个对象。而且,在Java 1.5中引入泛型后,可以限制Deque中可以存储的对象的类型。这个类型安全的队列可以定义为:。

// Obj is the type of the object to be stored in Deque Deque<Obj> deque = new ArrayDeque<Obj> ();

例子: Deque

// Java program to demonstrate the working
// of a Deque in Java
 
import java.util.*;
 
public class DequeExample {
    public static void main(String[] args)
    {
        Deque<String> deque
            = new LinkedList<String>();
 
        // We can add elements to the queue
        // in various ways
 
        // Add at the last
        deque.add("Element 1 (Tail)");
 
        // Add at the first
        deque.addFirst("Element 2 (Head)");
 
        // Add at the last
        deque.addLast("Element 3 (Tail)");
 
        // Add at the first
        deque.push("Element 4 (Head)");
 
        // Add at the last
        deque.offer("Element 5 (Tail)");
 
        // Add at the first
        deque.offerFirst("Element 6 (Head)");
 
        System.out.println(deque + "\n");
 
        // We can remove the first element
        // or the last element.
        deque.removeFirst();
        deque.removeLast();
        System.out.println("Deque after removing "
                           + "first and last: "
                           + deque);
    }
}

输出:

[Element 6 (Head), Element 4 (Head), Element 2 (Head), Element 1 (Tail), Element 3 (Tail), Element 5 (Tail)] Deque after removing first and last: [Element 4 (Head), Element 2 (Head), Element 1 (Tail), Element 3 (Tail)]

使用Deque接口和ArrayDeque类的操作

让我们看看如何使用ArrayDeque类对deque进行一些常用的操作。

1.添加元素: 为了在deque中添加一个元素,我们可以使用add()方法。队列和deque之间的区别是,在deque中,添加可以从任何方向进行。因此,还有另外两个方法,名为addFirst()和addLast(),用于在两端添加元素。

// Java program to demonstrate the
// addition of elements in deque
 
import java.util.*;
public class ArrayDequeDemo {
    public static void main(String[] args)
    {
        // Initializing an deque
        Deque<String> dq
            = new ArrayDeque<String>();
 
        // add() method to insert
        dq.add("For");
        dq.addFirst("Geeks");
        dq.addLast("Geeks");
 
        System.out.println(dq);
    }
}

输出

[Geeks, For, Geeks]

2.移除元素: 为了从deque中移除一个元素,有多种方法可用。由于我们也可以从两端移除,deque接口为我们提供了 removeFirst(), removeLast() 方法。除此之外,这个接口还为我们提供了poll()、pop()、pollFirst()、pollLast()方法,其中pop()是用来删除和返回deque的头部。然而,poll()的使用是因为它提供了与pop()相同的功能,并且在deque为空时不会返回一个异常。

// Java program to demonstrate the
// removal of elements in deque
 
import java.util.*;
public class ArrayDequeDemo {
    public static void main(String[] args)
    {
        // Initializing an deque
        Deque<String> dq
            = new ArrayDeque<String>();
 
        // add() method to insert
        dq.add("For");
        dq.addFirst("Geeks");
        dq.addLast("Geeks");
 
        System.out.println(dq);
 
        System.out.println(dq.pop());
 
        System.out.println(dq.poll());
 
        System.out.println(dq.pollFirst());
 
        System.out.println(dq.pollLast());
    }
}

输出

[Geeks, For, Geeks]
Geeks
For
Geeks
null

3. 迭代 deque: 由于deque可以从两个方向迭代,deque接口的迭代器方法为我们提供了两种迭代的方式。一种是从第一个方向,另一种是从后面。

// Java program to demonstrate the
// iteration of elements in deque
 
import java.util.*;
public class ArrayDequeDemo {
    public static void main(String[] args)
    {
        // Initializing an deque
        Deque<String> dq
            = new ArrayDeque<String>();
 
        // add() method to insert
        dq.add("For");
        dq.addFirst("Geeks");
        dq.addLast("Geeks");
        dq.add("is so good");
 
        for (Iterator itr = dq.iterator();
             itr.hasNext();) {
            System.out.print(itr.next() + " ");
        }
 
        System.out.println();
 
        for (Iterator itr = dq.descendingIterator();
             itr.hasNext();) {
            System.out.print(itr.next() + " ");
        }
    }
}

输出

Geeks For Geeks is so good 
is so good Geeks For Geeks

实现Deque接口的类是ArrayDeque

ArrayDeque 在集合框架中实现的ArrayDeque类为我们提供了一种应用可调整大小的数组的方法。这是一种特殊的数组,可以增长,并允许用户从队列的两边添加或删除一个元素。阵列deques没有容量限制,它们根据需要增长以支持使用。它们不是线程安全的,这意味着在没有外部同步的情况下,ArrayDeque不支持多线程的并发访问。ArrayDeque类作为堆栈使用时,可能比Stack快。ArrayDeque类在作为队列使用时,可能比LinkedList更快。让我们看看如何使用这个类来创建一个队列对象。

// Java program to demonstrate the
// creation of deque object using the
// ArrayDeque class in Java
 
import java.util.*;
public class ArrayDequeDemo {
    public static void main(String[] args)
    {
        // Initializing an deque
        Deque<Integer> de_que
            = new ArrayDeque<Integer>(10);
 
        // add() method to insert
        de_que.add(10);
        de_que.add(20);
        de_que.add(30);
        de_que.add(40);
        de_que.add(50);
 
        System.out.println(de_que);
 
        // clear() method
        de_que.clear();
 
        // addFirst() method to insert the
        // elements at the head
        de_que.addFirst(564);
        de_que.addFirst(291);
 
        // addLast() method to insert the
        // elements at the tail
        de_que.addLast(24);
        de_que.addLast(14);
 
        System.out.println(de_que);
    }
}

输出

[10, 20, 30, 40, 50]
[291, 564, 24, 14]

Deque接口的方法

以下是deque接口中的方法。

方法 描述
add(element) 这个方法用来在队列的尾部添加一个元素。如果Deque有容量限制,没有空间可供插入,它会返回IllegalStateException。该函数在成功插入时返回true。
addFirst(element) 这个方法用来在队列的头部添加一个元素。如果Deque有容量限制,没有空间可以插入,它会返回IllegalStateException。该函数在成功插入时返回true。
addLast(element) 这个方法用来在队列的尾部添加一个元素。如果Deque有容量限制,没有空间可以插入,它会返回IllegalStateException。该函数在成功插入时返回true。
contains() 该方法用于检查队列是否包含给定的对象。
descendingIterator() 该方法返回deque的一个迭代器。元素将按照从最后一个(tail)到第一个(head)的顺序返回。
element() 这个方法用于检索,但不是删除,这个deque所代表的队列的头部。
getFirst() 这个方法用来检索,但不是删除,这个deque的第一个元素。
getLast() 这个方法用来检索,但不是删除,这个deque的最后一个元素。
iterator() 该方法返回deque的一个迭代器。元素将按照从第一个(头)到最后一个(尾)的顺序返回。
offer(element) 这个方法用于在队列的尾部添加一个元素。这个方法比add()方法更好,因为这个方法在容器容量满的时候不会抛出一个异常,因为它返回false。
offerFirst(element) 这个方法用来在队列的头部添加一个元素。这个方法比addFirst()方法更好,因为这个方法不会在容器容量已满时抛出一个异常,因为它返回false。
offerLast(element) 这个方法用来在队列的尾部添加一个元素。这个方法比add()方法更好,因为这个方法不会在容器容量已满时抛出一个异常,因为它返回false。
peek() 这个方法用于检索deque头部的元素,但不从deque中移除元素。如果deque是空的,该方法返回null。
peekFirst() 该方法用于检索deque头部的元素,但不从deque中移除该元素。如果deque是空的,该方法返回null。
peekLast() 该方法用于检索deque尾部的元素,但不从deque中移除该元素。如果deque是空的,该方法返回null。
poll() 该方法用于检索和删除deque头部的元素。如果deque是空的,该方法返回null。
pollFirst() 该方法用于检索和删除deque头部的元素。如果deque是空的,该方法返回null。
pollLast() 该方法用于检索和删除deque尾部的元素。如果deque是空的,该方法返回null。
pop() 该方法用于从头部移除一个元素并返回。
push(element) 该方法用于在队列的头部添加一个元素。
removeFirst() 该方法用于从队列的头部移除一个元素。
removeLast() 这个方法用来从队列的尾部移除一个元素。
size() 该方法用于查找并返回deque的大小。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程