java Queue、 Deque队列接口的使用

Queue、 Deque接口

(一)、Queue

  • 队列(Queue)是一种特殊的线性表,是一种先进先出(FIFO)的数据结构。它只允许在 表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作 的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。
  • LinkedList是Queue接口的实现类
public class LinkedList<E>extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable
    
// 注意Deque 已经实现Queue接口

实现一个队列(queue), 并使用相应的操作

  • boolean add() :将指定的元素插入此队列(如果立即可行且不会违反容量限制),在 成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。
  • element() :获取,但是不移除此队列的头。
  • boolean offer() :将指定的元素插入此队列(如果立即可行且不会违反容量限制), 当使用有容量限制的队列时,此方法通常要优于 add(E),后者可能无法插入元素,而 只是抛出一个异常。
  • peek() :获取但不移除此队列的头;如果此队列为空,则返回 null。 E poll() :获取并移除此队列的头,如果此队列为空,则返回 null。
  • remove() :获取并移除此队列的头。
// 创建一个队列
Queue<String> queue = new LinkedList<>();

// 向队列中添加数据
// 方法1 add()
queue.add("张三");
queue.add("李四");
queue.add("王五");

// 方法2 offer()
queue.offer("赵六");
queue.forEach( v -> System.out.print(v + ", "));
// 	张三, 李四, 王五, 赵六, 

System.out.println("\n--------------element()");
// 获取数据
// 方法1 element() 但不会移除队列头
String value = queue.element();
System.out.println(value);
/**
 --------------element()
 张三
*/

// 方法2 peek() 不会移除队列头, 如果队列为空, 返回null
System.out.println("------------peek()");
value = queue.peek();
System.out.println(value);
/**
    ------------peek()
    张三
*/

System.out.println("------------poll()");
// 方法3 poll() 获取并移除队列头, 如果队列为空, 返回null
value = queue.poll();
System.out.println(value);
queue.forEach( v -> System.out.print(v + ", "));
/**
	------------poll()
    张三
    李四, 王五, 赵六, 
*/

System.out.println("\n-------------remove()");
// 方法4 remove() 获取并移除此队列的头
value = queue.remove();
System.out.println(value);
queue.forEach( v -> System.out.print(v + ", "));
/**
    -------------remove()
    李四
    王五, 赵六, 
*/

(二)、Deque

  • 一个线性 collection,支持在两端插入和移除元素。 此接口既支持有容量限制的双端队列,也支持没有固定大小限制的双端队列。-
  • 与Queue 使用差不多,只不过它是双向的
  • 实现一个双向队列, 及其操作
 // 创建一个双向队列
Deque<String> deque = new LinkedList<>();

// 向队列头部中添加数据, 或者 addFirst()
deque.add("张三");
deque.add("李四");
deque.add("王五");

// 向队列尾部添加数据
deque.addLast("王二麻子");
deque.addLast("小雪");
System.out.println(deque.toString());
/**
	[张三, 李四, 王五, 王二麻子, 小雪]
*/

// 获取数据
System.out.println("-----------获取数据");
// 1. 从队列头获取数据, 但移除
System.out.println(deque.getFirst());
// 2. 从队列尾部获取数据, 但移除
System.out.println(deque.getLast());
System.out.println(deque.toString());
/**
	 -----------获取数据
    张三
    小雪
    [张三, 李四, 王五, 王二麻子, 小雪]
*/

System.out.println("-----------获取数据并移除队列");
System.out.println(deque.toString());

// pollFirst(), 从头部获取并移除
String value = deque.pollFirst();
System.out.println("头部:"+value);

// pollLast() 从尾部获取数据并移除
value = deque.pollLast();
System.out.println("尾部:" + value);
System.out.println(deque.toString());
/**
    -----------获取数据并移除队列
	[张三, 李四, 王五, 王二麻子, 小雪]
    头部:张三
    尾部:小雪
    [李四, 王五, 王二麻子]
*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值