队列Queue

定义

队列Queue也是Collection的一个子接口,它也是常用的数据结构。

可以将队列看成特殊的线性表,队列限制对线性表的访问方式:
只能从一端添加(offer)元素,从另一端取出(poll)元素。

队列遵循先进先出(FIFO )的原则,实现类LinkedList也实现了该接口,选择此类实现Queue的原因在于Queue经常要进行添加和删除操作,而LinkedList在这方面效率比较高。

应用

import java.util.LinkedList;
import java.util.Queue;

public class QueueDemo {

	public static void main(String[] args) {
		// 定义一个队列q
		Queue<String> q = new LinkedList<String>();
		/*
		 * boolean offer(E e) 
		 * 将指定的元素插入到此队列中。  
		 * 即:从队尾进
		 */
		q.offer("aa");
		q.offer("bb");
		q.offer("cc");
		System.out.println("队列q:"+q);//队列q:[aa, bb, cc]
		/*
		 * E peek() 
		 * 检索但不删除此队列的头,如果此队列为空,则返回 null 。  
		 * 即:查看队首元素
		 */
		String s = q.peek();
		System.out.println("队首元素:"+s);//队首元素:aa
		/*
		 * E poll() 
		 * 检索并删除此队列的头,如果此队列为空,则返回 null 。  
		 * 即:移除队首元素
		 */
		String s1 = q.poll();
		System.out.println("移除的元素:"+s1);//移除的元素:aa
		System.out.println("移除后的队列:"+q);//移除后的队列:[bb, cc]
		
		/*
		 * 注意:
		 * 当对列为空时,peek()的返回值为null
		 * 所以当我们进行移除队首操作时,最好先使用peek方法,
		 * 查看队首是否为null
		 */
		while(q.peek()!=null){
			String s2 = q.poll();
			System.out.println("移除的元素:"+s2);
			/* 输出:
			 * 移除的元素:bb
			 * 移除的元素:cc
			 */
		}

	}

}

Queue的子接口

Deque:支持两端元素插入和移除的线性集合,Queue的子接口,定义了"双端队列"的数据结构
即:两端都可以进行offer和poll操作

import java.util.Deque;
import java.util.LinkedList;

public class DequeDemo {

	public static void main(String[] args) {
		// 定义一个双端队列dq
		Deque<String> dq = new LinkedList<String>();
		/*
		 * boolean offerFirst(E e) 
		 * 在此deque的前面插入指定的元素 
		 */
		dq.offerFirst("aa");
		dq.offerFirst("bb");
		dq.offerFirst("cc");
		System.out.println(dq);
		//输出:[cc, bb, aa]
		/*
		 * boolean offerLast(E e) 
		 * 在此deque的末尾插入指定的元素 
		 */
		dq.offerLast("dd");
		dq.offerLast("ee");
		System.out.println(dq);
		//输出:[cc, bb, aa, dd, ee]
		/*
		 * E peekFirst() 检索,但不删除,此deque的第一个元素 ----即 查看队首元素
		 * E peekLast() 检索但不删除此deque的最后一个元素 ----即 查看队尾元素
		 */
		System.out.println("队首元素:"+dq.peekFirst());//输出:队首元素:cc
		System.out.println("队尾元素:"+dq.peekLast());//输出:队尾元素:ee
		/*
		 * E pollFirst() 检索并删除此deque的第一个元素 ----即 移除队首元素
		 * E pollLast() 检索并删除此deque的最后一个元素 ----即 移除队尾元素
		 */
		System.out.println("移除的队首元素:"+dq.pollFirst());//输出:移除的队首元素:cc
		System.out.println("移除队首元素后的队列:"+dq);//输出:移除队首元素后的队列:[bb, aa, dd, ee]
		System.out.println("移除的队尾元素:"+dq.pollLast());//输出:移除的队尾元素:ee
		System.out.println("移除队尾元素后的队列:"+dq);//输出:移除队尾元素后的队列:[bb, aa, dd]
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值