这个 Java中的ArrayDeque 除了Deque接口的实现之外,还提供了一种应用可调整大小的数组的方法。它也被称为 数组双端队列 或 阵列甲板 。这是一种特殊的数组,它可以增长,并允许用户从队列两侧添加或删除元素。
很少的 重要特征 ArrayDeque的主要功能如下:
- 阵列设备没有容量限制,它们会根据需要增长以支持使用。
- 它们不是线程安全的,这意味着在没有外部同步的情况下,ArrayDesk不支持多线程并发访问。
- ArrayQue中禁止使用空元素。
- ArrayDeque类用作堆栈时可能比Stack快。
- ArrayQue类在用作队列时可能比LinkedList快。
ArrayDeque实现的接口:
ArrayDeque类实现以下两个接口:
ArrayDeque同时实现队列和Deque。它可以从两侧动态调整大小。层次结构中ArrayDeque的所有实现接口都是 可序列化 , 可克隆 , Iterable
语法: 公告
公共类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
相关文章 :