Queue:
队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。
LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用。
import java.util.LinkedList;
import java.util.Queue;
public class Main {
public static void main(String[] args) {
//add()和remove()方法在失败的时候会抛出异常(不推荐)
Queue<String> queue = new LinkedList<String>();
//添加元素
queue.offer("a");
queue.offer("b");
queue.offer("c");
queue.offer("d");
queue.offer("e");
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("poll="+queue.poll()); //返回第一个元素,并在队列中删除
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("element="+queue.element()); //返回第一个元素
for(String q : queue){
System.out.println(q);
}
System.out.println("===");
System.out.println("peek="+queue.peek()); //返回第一个元素
for(String q : queue){
System.out.println(q);
}
}
}
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。
下表显示了jdk1.5中的阻塞队列的操作:
add
增加一个元索
如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove
移除并返回队列头部的元素
如果队列为空,则抛出一个NoSuchElementException异常
element
返回队列头部的元素
如果队列为空,则抛出一个NoSuchElementException异常
offer
添加一个元素并返回true
如果队列已满,则返回false
poll
移除并返问队列头部的元素
如果队列为空,则返回null
peek
返回队列头部的元素
如果队列为空,则返回null
put
添加一个元素
如果队列满,则阻塞
take
移除并返回队列头部的元素
如果队列为空,则阻塞
Deque:
deque(也称为双端队列)是与队列类似的项的有序集合。它有两个端部,首部和尾部,并且项在集合中保持不变。deque 不同的地方是添加和删除项是非限制性的。可以在前面或后面添加新项。同样,可以从任一端移除现有项。如下展示了一个 Python 数据对象的 deque 。
from python_basic_deque.deque_definition import Deque
# 新建一个deque队列
d = Deque()
# 判断队列是否为空
print(d.isEmpty())
# 在队头添加元素1,并查看该队列
d.addFront(1)
print(d.list1())
# 在队头添加元素2,并查看该队列
d.addFront(2)
print(d.list1())
# 在队头添加元素3,并查看该队列
d.addFront(3)
print(d.list1())
# 在队尾添加元素4,并查看该队列
d.addRear(4)
print(d.list1())
# 在队尾添加元素5,并查看该队列
d.addRear(5)
print(d.list1())
# 队列大小为,判断是否为空
print(d.size())
print(d.isEmpty())
# 移除队头
d.removeFront()
print(d.list1())
# 移除队尾
d.removeRear()
print(d.list1())
//by dongge-destiny