Java用于构造栈结构时优先使用Deque
Class Stack<E>
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractList<E>
-
- java.util.Vector<E>
-
- java.util.Stack<E>
-
-
实现的所有接口
Serializable
,Cloneable
,Iterable<E>
,Collection<E>
,List<E>
,RandomAccess
public class Stack<E> extends Vector<E>
Stack
类表示后进先出(LIFO)对象堆栈。它通过五个操作扩展了类Vector
,允许将向量视为堆栈。提供了通常的push
和pop
操作,以及在堆栈顶部项目中的peek
的方法,用于测试堆栈是否为empty
的方法,以及用于项目的堆栈的方法以及发现它的距离search
是从顶部。首次创建堆栈时,它不包含任何项目。
Deque
接口及其实现提供了更完整和一致的LIFO堆栈操作集,应优先使用此类。 例如:Deque<Integer> stack = new ArrayDeque<Integer>();
-
继承关系图??
Interface Deque<E>
-
-
参数类型
E
- 此双端队列中保留的元素类型 -
All Superinterfaces:
Collection<E>
,Iterable<E>
,Queue<E>
-
All Known Subinterfaces:
BlockingDeque<E>
-
所有已知实现类:
ArrayDeque
,ConcurrentLinkedDeque
,LinkedBlockingDeque
,LinkedList
public interface Deque<E> extends Queue<E>
-
线性集合,支持两端插入和移除元素。名称deque是“双端队列”的缩写,通常发音为“deck”。大多数
Deque
实现对它们可能包含的元素数量没有固定限制,但此接口支持容量限制的deques以及没有固定大小限制的deques。 -
此接口定义了访问双端队列两端元素的方法。 提供了插入,移除和检查元素的方法。 这些方法中的每一种都以两种形式存在:一种在操作失败时抛出异常,另一种返回特殊值(
null
或false
,具体取决于操作)。 后一种形式的插入操作专门设计用于容量限制的Deque
实现; 在大多数实现中,插入操作不会失败。
-
-
此接口扩展了
Queue
接口。 当deque用作队列时,会产生FIFO(先进先出)行为。 元素在双端队列的末尾添加并从头开始删除。 继承自Queue
接口的方法与Deque
方法完全等效,如下表所示:Comparison of Queue and Deque methods
Queue
Method EquivalentDeque
Methodadd(e)
addLast(e)
offer(e)
offerLast(e)
remove()
removeFirst()
poll()
pollFirst()
element()
getFirst()
peek()
peekFirst()
- Deques也可以用作LIFO(后进先出)堆栈。 应优先使用此接口,而不是旧版
Stack
。 当deque用作堆栈时,元素将从双端队列的开头推出并弹出。 堆栈方法相当于Deque
方法,如下表所示:
Comparison of Stack and Deque methods Stack Method Equivalent
Deque
Methodpush(e)
addFirst(e)
pop()
removeFirst()
peek()
getFirst()
请注意,当deque用作队列或堆栈时,
peek
方法同样有效; 在任何一种情况下,元素都是从双端队列的开头绘制的。此界面提供了两种删除内部元素的方法,
removeFirstOccurrence
和removeLastOccurrence
。与
List
接口不同,此接口不支持对元素的索引访问。虽然严格要求
Deque
实现禁止插入null元素,但强烈建议他们这样做。 任何用户Deque
强烈建议实现,也允许null元素不采取插入空的能力优势。 这是因为null
被各种方法用作特殊返回值,以指示deque为空。Deque
实现通常不定义equals
和hashCode
方法的基于元素的版本,而是继承类Object
基于身份的版本。 - Deques也可以用作LIFO(后进先出)堆栈。 应优先使用此接口,而不是旧版
-
-
方法摘要
变量和类型 方法 描述 boolean
add(E e)
将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回 true
成功时和抛出IllegalStateException
如果当前没有空间可用的。boolean
addAll(Collection<? extends E> c)
在此双端队列的末尾添加指定集合中的所有元素,就像通过在每个 对象上调用 addLast(E)
一样 ,按照集合的迭代器返回它们的顺序。void
addFirst(E e)
如果可以在不违反容量限制的情况下立即插入指定元素,则在此双端队列的前面插入指定元素,如果当前没有可用空间,则抛出 IllegalStateException
。void
addLast(E e)
如果可以在不违反容量限制的情况下立即插入指定元素,则在此双端队列的末尾插入指定元素,如果当前没有可用空间,则抛出 IllegalStateException
。boolean
contains(Object o)
如果此双端队列包含指定的元素,则返回 true
。Iterator<E>
descendingIterator()
以相反的顺序返回此双端队列中元素的迭代器。 E
element()
检索但不删除此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素)。 E
getFirst()
检索但不删除此双端队列的第一个元素。 E
getLast()
检索但不删除此双端队列的最后一个元素。 Iterator<E>
iterator()
以适当的顺序返回此双端队列中元素的迭代器。 boolean
offer(E e)
将指定的元素插入此双端队列表示的队列中(换句话说,在此双端队列的尾部),如果它是立即可行且不会违反容量限制,返回 true
在成功和false
如果当前没有空间可用。boolean
offerFirst(E e)
将指定元素插入此双端队列的前面,除非它违反容量限制。 boolean
offerLast(E e)
在此双端队列的末尾插入指定的元素,除非它违反容量限制。 E
peek()
检索但不移除此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素),如果此双端队列为空,则返回 null
。E
peekFirst()
检索但不删除此双端队列的第一个元素,如果此双端队列为空,则返回 null
。E
peekLast()
检索但不删除此双端队列的最后一个元素,如果此双端队列为空,则返回 null
。E
poll()
检索并删除此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素),如果此双端队列为空,则返回 null
。E
pollFirst()
检索并删除此双端队列的第一个元素,如果此双端队列为空,则返回 null
。E
pollLast()
检索并删除此双端队列的最后一个元素,如果此双端队列为空,则返回 null
。E
pop()
从此双端队列表示的堆栈中弹出一个元素。 void
push(E e)
如果可以在不违反容量限制的情况下立即执行此操作, IllegalStateException
到此双端队列表示的堆栈(换句话说,在此双端队列的头部),如果当前没有可用空间则抛出IllegalStateException
。E
remove()
检索并删除此双端队列表示的队列的头部(换句话说,此双端队列的第一个元素)。 boolean
remove(Object o)
从此双端队列中删除第一次出现的指定元素。 E
removeFirst()
检索并删除此双端队列的第一个元素。 boolean
removeFirstOccurrence(Object o)
从此双端队列中删除第一次出现的指定元素。 E
removeLast()
检索并删除此双端队列的最后一个元素。 boolean
removeLastOccurrence(Object o)
从此双端队列中删除最后一次出现的指定元素。 int
size()
返回此双端队列中的元素数。
-
原文:https://www.cnblogs.com/code-duck/p/13569388.html