Java笔记之Deque与Stack

使用Deque

允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),简称Deque。
Java集合提供了接口Deque来实现一个双端队列,它的功能:
①既可以添加到队尾,也可以添加到队首;
②既可以从队首获取,又可以从队尾获取。
在这里插入图片描述
在原来的queue的方法名上加了表示在队首还是队尾操作的表示(Last或First)。
Deque接口实际上扩展自Queue

public interface Deque<E> extends Queue<E> {
    ...
}

所以说你是可以继续用add()/offer()的,但是为了能够看出操作 的位置还是写上比较好。
Deque是一个接口,它的实现类有ArrayDequeLinkedList
LinkedList即是List,又是Queue,还是Deque。但是我们在使用的时候,总是用特定的接口来引用它,这是因为持有接口说明代码的抽象层次更高,而且接口本身定义的方法代表了特定的用途。

Deque<String> d2 = new LinkedList<>();
d2.offerLast("z");

可见面向抽象编程的一个原则就是:尽量持有接口,而不是具体的实现类。

Stack

栈的性质C的时候就学过了,先进后出,只需看下Java里对于他的方法有哪些
Stack的入栈和出栈的操作:
①把元素压栈:push(E)
②把栈顶的元素“弹出”:pop(E)
③取栈顶元素但不弹出:peek(E)
在Java中,我们用Deque可以实现Stack的功能:
①把元素压栈:push(E)/addFirst(E)
②把栈顶的元素“弹出”:pop(E)/removeFirst()
③取栈顶元素但不弹出:peek(E)/peekFirst()
Java的集合类并没有单独的Stack接口,因为有个遗留类名字就叫Stack,出于兼容性考虑,所以没办法创建Stack接口,只能用Deque接口来“模拟”一个Stack了。
当我们把Deque作为Stack使用时,注意只调用push()/pop()/peek()方法,不要调用addFirst()/removeFirst()/peekFirst()方法,那样会破坏栈的本质。

发布了85 篇原创文章 · 获赞 10 · 访问量 3690

猜你喜欢

转载自blog.csdn.net/LebronGod/article/details/104927050
今日推荐