Java中的ArrayDeque

这个 Java中的ArrayDeque 除了Deque接口的实现之外,还提供了一种应用可调整大小的数组的方法。它也被称为 数组双端队列 阵列甲板 。这是一种特殊的数组,它可以增长,并允许用户从队列两侧添加或删除元素。

null

很少的 重要特征 ArrayDeque的主要功能如下:

  • 阵列设备没有容量限制,它们会根据需要增长以支持使用。
  • 它们不是线程安全的,这意味着在没有外部同步的情况下,ArrayDesk不支持多线程并发访问。
  • ArrayQue中禁止使用空元素。
  • ArrayDeque类用作堆栈时可能比Stack快。
  • ArrayQue类在用作队列时可能比LinkedList快。

ArrayDeque实现的接口:

ArrayDeque类实现以下两个接口:

  • 队列 接口: 它是一种先进先出的数据结构,元素从后面添加。
  • 德克 接口: 它是一个双端队列,您可以在其中从两侧插入元素。它是一个实现队列的接口。

ArrayDeque同时实现队列和Deque。它可以从两侧动态调整大小。层次结构中ArrayDeque的所有实现接口都是 可序列化 , 可克隆 , Iterable , 收藏 , 德克 , 队列

ArrayDeque in Java

语法: 公告

公共类ArrayDeque

延伸 AbstractCollection

工具 Deque ,可克隆,可序列化

在这里 E 指可以引用任何类的元素,例如整数或字符串类。

现在我们已经完成了语法,现在让我们在实现之前为它定义构造函数,以便更好地掌握它,更好地感知输出。

  • ArrayDeque(): 此构造函数用于创建空的ArrayQue,默认情况下,它的初始容量为16个元素。
ArrayDeque<E> dq = new ArrayDeque<E>();
  • ArrayDeque(系列c): 此构造函数用于创建一个ArrayQue,其中包含与指定集合相同的所有元素。
ArrayDeque<E> dq = new ArrayDeque<E>(Collection col);
  • ArrayDeque(整数元素): 此构造函数用于创建空的ArrayQue,并具有包含指定数量元素的能力。
ArrayDeque<E> dq = new ArrayDeque<E>(int numofElements);

ArrayDeque中的方法如下:

注: 在这里 要素 是ArrayDeque存储的元素类型。

方法

描述

添加(元素e) 该方法在deque的末尾插入一个特定元素。
阿道尔​(收集c) 将指定集合中的所有元素添加到此数据块的末尾,就像对每个元素调用addLast(E)一样,按照集合迭代器返回的顺序。
addFirst(元素e) 该方法在deque的开头插入特定元素。
addLast(元素e) 该方法在deque的末尾插入一个特定元素。它类似于add()方法
清除() 该方法将删除所有deque元素。
克隆() 该方法复制了deque。
包含(Obj) 该方法检查deque是否包含该元素
元素() 该方法返回deque头部的元素
弗雷奇​(消费者行动) 对Iterable的每个元素执行给定的操作,直到所有元素都已处理或该操作引发异常。
getFirst() 该方法返回deque的第一个元素
getLast() 该方法返回deque的最后一个元素
isEmpty() 该方法检查deque是否为空。
迭代器() 返回此数据块中元素的迭代器。
报价(要素e) 该方法在deque的末尾插入元素。
报价第一(要素e) 该方法在deque的前面插入元素。
offerLast(元素e) 该方法在deque的末尾插入元素。
peek() 该方法返回head元素而不删除它。
投票 该方法返回head元素并将其删除
pop() 该方法为堆栈弹出一个元素,由deque表示
推动(元件e) 该方法将元素推送到由deque表示的堆栈上
删除() 该方法返回head元素并将其删除
去除​(对象o) 从此数据集中删除指定元素的单个实例。
移除所有​(收集c) 删除指定集合中也包含的此集合的所有元素(可选操作)。
removeFirst() 该方法返回第一个元素,并将其删除
移除第一次发生​(对象o) 删除此deque中指定元素的第一个匹配项(从头到尾遍历deque时)。
移除​(谓词过滤器) 删除此集合中满足给定谓词的所有元素。
removeLast() 该方法返回最后一个元素,并将其删除
消除复发​(对象o) 删除此deque中指定元素的最后一次出现(从头到尾遍历deque时)。
保留​(收集c) 仅保留此集合中包含在指定集合中的元素(可选操作)。
大小() 返回此数据块中的元素数。
拆分器() 在该数据块中的元素上创建一个后期绑定且快速失效的拆分器。
toArray() 返回一个数组,该数组按正确顺序(从第一个元素到最后一个元素)包含此数据集中的所有元素。
托雷​(T[]a) 返回一个数组,该数组按正确的顺序(从第一个元素到最后一个元素)包含此数据集中的所有元素;返回数组的运行时类型是指定数组的运行时类型。

从java类继承的方法。util。抽象集合

方法

执行的动作

CONTANSALL(c系列) 如果此集合包含指定集合中的所有元素,则返回true。
toString() 返回此集合的字符串表示形式。

方法继承自java接口。util。收集

方法

执行的动作

CONTANSALL(c系列) 如果此集合包含指定集合中的所有元素,则返回true。
等于 将指定的对象与此集合进行相等性比较。
hashcode() 返回此集合的哈希代码值。
parallelStream() 返回一个可能与此集合并行的流作为其源。
流() 返回以此集合为源的连续流。
托雷​(IntFunction 生成器) 使用提供的生成器函数分配返回的数组,返回包含此集合中所有元素的数组。

在java接口中声明的方法。util。德克

方法

执行的动作

下降迭代器() 按相反顺序返回此数据块中元素的迭代器。
peekFirst() 检索但不删除此数据块的第一个元素,如果此数据块为空,则返回null。
peek last() 检索但不删除此数据块的最后一个元素,如果此数据块为空,则返回null。
pollFirst() 检索并删除此数据块的第一个元素,如果此数据块为空,则返回null。
pollLast() 检索并删除此数据块的最后一个元素,如果此数据块为空,则返回null。

实例

JAVA

// Java program to Implement ArrayDeque in Java
//
// Importing utility classes
import java.util.*;
// ArrayDequeDemo
public class GGFG {
public static void main(String[] args)
{
// Creating and initializing deque
// Declaring object of integer type
Deque<Integer> de_que = new ArrayDeque<Integer>( 10 );
// Operations 1
// add() method
// Adding custom elements
// using add() method to insert
de_que.add( 10 );
de_que.add( 20 );
de_que.add( 30 );
de_que.add( 40 );
de_que.add( 50 );
// Iterating using for each loop
for (Integer element : de_que) {
// Print the corresponding element
System.out.println( "Element : " + element);
}
// Operation 2
// clear() method
System.out.println( "Using clear() " );
// Clearing all elements using clear() method
de_que.clear();
// Operations 3
// addFirst() method
// Inserting at the start
de_que.addFirst( 564 );
de_que.addFirst( 291 );
// Operation 4
// addLast() method
// Inserting at end
de_que.addLast( 24 );
de_que.addLast( 14 );
// Display message
System.out.println(
"Above elements are removed now" );
// Iterators
// Display message
System.out.println(
"Elements of deque using Iterator :" );
for (Iterator itr = de_que.iterator();
itr.hasNext();) {
System.out.println(itr.next());
}
// descendingIterator()
// To reverse the deque order
System.out.println(
"Elements of deque in reverse order :" );
for (Iterator dItr = de_que.descendingIterator();
dItr.hasNext();) {
System.out.println(dItr.next());
}
// Operation 5
// element() method : to get Head element
System.out.println(
"Head Element using element(): "
+ de_que.element());
// Operation 6
// getFirst() method : to get Head element
System.out.println( "Head Element using getFirst(): "
+ de_que.getFirst());
// Operation 7
// getLast() method : to get last element
System.out.println( "Last Element using getLast(): "
+ de_que.getLast());
// Operation 8
// toArray() method :
Object[] arr = de_que.toArray();
System.out.println( "Array Size : " + arr.length);
System.out.print( "Array elements : " );
for ( int i = 0 ; i < arr.length; i++)
System.out.print( " " + arr[i]);
// Operation 9
// peek() method : to get head
System.out.println( "Head element : "
+ de_que.peek());
// Operation 10
// poll() method : to get head
System.out.println( "Head element poll : "
+ de_que.poll());
// Operation 11
// push() method
de_que.push( 265 );
de_que.push( 984 );
de_que.push( 2365 );
// Operation 12
// remove() method : to get head
System.out.println( "Head element remove : "
+ de_que.remove());
System.out.println( "The final array is: " + de_que);
}
}


输出

Element : 10Element : 20Element : 30Element : 40Element : 50Using clear() Above elements are removed nowElements of deque using Iterator :2915642414Elements of deque in reverse order :1424564291Head Element using element(): 291Head Element using getFirst(): 291Last Element using getLast(): 14Array Size : 4Array elements :  291 564 24 14Head element : 291Head element poll : 291Head element remove : 2365The final array is: [984, 265, 564, 24, 14]

如果在这个例子中有一些不清晰的地方,如果是这样的话,那么我们将在ArrayQue类上提出各种操作,让我们看看如何在ArrayQue上执行一些常用的操作,以更好地理解我们在上面使用的操作,从而从整体上说明ArrayDeque。

  • 加法运算
  • 访问操作
  • 移除操作
  • 在Deque中迭代

让我们通过提供干净的java程序来实现每一个操作,如下所示:

操作1: 添加元素

为了向ArrayQue添加元素,我们可以使用add()、addFirst()、addLast()、offer()、offerFirst()和offerLast()方法。

实例

JAVA

// Java program to Illustrate Addition of elements
// in ArrayDeque
// Importing required classes
import java.io.*;
import java.util.*;
// Main class
// AddingElementsToArrayDeque
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Initializing a deque
// since deque is an interface
// it is assigned the
// ArrayDeque class
Deque<String> dq = new ArrayDeque<String>();
// add() method to insert
dq.add( "The" );
dq.addFirst( "To" );
dq.addLast( "Geeks" );
// offer() method to insert
dq.offer( "For" );
dq.offerFirst( "Welcome" );
dq.offerLast( "Geeks" );
// Printing Elements of ArrayDeque to the console
System.out.println( "ArrayDeque : " + dq);
}
}


输出:

ArrayDeque : [Welcome, To, The, Geeks, For, Geeks]

操作2: 访问元素

添加元素后,如果我们希望访问这些元素,我们可以使用内置方法,比如getFirst()、getLast()等。

实例

JAVA

// Java program to Access Elements of ArrayDeque
// Importing required classes
import java.io.*;
import java.util.*;
// Main class
// AccessingElementsOfArrayDeque
public class GFG {
// Main driver method
public static void main(String args[])
{
// Creating an empty ArrayDeque
ArrayDeque<String> de_que
= new ArrayDeque<String>();
// Using add() method to add elements into the Deque
// Custom input elements
de_que.add( "Welcome" );
de_que.add( "To" );
de_que.add( "Geeks" );
de_que.add( "4" );
de_que.add( "Geeks" );
// Displaying the ArrayDeque
System.out.println( "ArrayDeque: " + de_que);
// Displaying the First element
System.out.println( "The first element is: "
+ de_que.getFirst());
// Displaying the Last element
System.out.println( "The last element is: "
+ de_que.getLast());
}
}


输出:

ArrayDeque: [Welcome, To, Geeks, 4, Geeks]The first element is: WelcomeThe last element is: Geeks

活动 3. 移除元素

要从数据块中删除元素,可以使用多种方法。由于我们也可以从两端移除,deque接口为我们提供了 removeFirst() , removeLast() 方法。除此之外,这个界面还为我们提供了 投票 , pop() , pollFirst() , pollLast() 方法,其中pop()用于移除并返回deque的头部。但是,之所以使用poll(),是因为它提供了与pop()相同的功能,并且在deque为空时不会返回异常。这些操作集如下所示:

实例

JAVA

// Java program to Illustrate Removal Elements in Deque
// Importing all utility classes
import java.util.*;
// RemoveElementsOfArrayDeque
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Initializing a deque
Deque<String> dq = new ArrayDeque<String>();
// add() method to insert
dq.add( "One" );
// addFirst inserts at the front
dq.addFirst( "Two" );
// addLast inserts at the back
dq.addLast( "Three" );
// print elements to the console
System.out.println( "ArrayDeque : " + dq);
// remove element as a stack from top/front
System.out.println(dq.pop());
// remove element as a queue from front
System.out.println(dq.poll());
// remove element from front
System.out.println(dq.pollFirst());
// remove element from back
System.out.println(dq.pollLast());
}
}


输出

ArrayDeque : [Two, One, Three]TwoOneThreenull

活动 4: 在Deque中迭代

由于deque可以从两个方向进行迭代,deque接口的迭代器方法为我们提供了两种迭代方法。一个从第一个,另一个从后面。以下列出了这些操作集:

实例

JAVA

// Java program to Illustrate Iteration of Elements
// in Deque
// Importing all utility classes
import java.util.*;
// Main class
// IterateArrayDeque
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Declaring and initializing an deque
Deque<String> dq = new ArrayDeque<String>();
// Adding elements at the back
// using add() method
dq.add( "For" );
// Adding element at the front
// using addFirst() method
dq.addFirst( "Geeks" );
// add element at the last
// using addLast() method
dq.addLast( "Geeks" );
dq.add( "is so good" );
// Iterate using Iterator interface
// from the front of the queue
for (Iterator itr = dq.iterator(); itr.hasNext();) {
// Print the elements
System.out.print(itr.next() + " " );
}
// New line
System.out.println();
// Iterate in reverse sequence in a queue
for (Iterator itr = dq.descendingIterator();
itr.hasNext();) {
System.out.print(itr.next() + " " );
}
}
}


输出:

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

相关文章 :

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享