队列集合Queue

特点:先进先出

有界队列 ArrayBlockingQueue

无界队列 Queue<String> queuelinked = new LinkedList<String>();

底层为数组,入队方法:add()    offer() 

区别:超出有界队列的队列长度时再为添加元素,add()方法会抛出Queue full的异常,其实add()方法底层还是调用的offer()方法进行添加的

ArrayBlockingQueue queue = new ArrayBlockingQueue<String>(5);
		queue.add("凌统");
		queue.add("太史慈");
		queue.add("太史慈");
		queue.add("甘宁");
		queue.add("周泰");
		queue.add("孙策");

出队方法:peek() element()                  poll()  remove()

peek()和element()方法会返回头元素,但不进行删除操作,区别依旧是队列为空时,前者返回null,后者抛出异常

poll()和remove()方法会返回头元素并将其在队列中删除,区别同上。

Queue<String> queuelinked = new LinkedList<String>();
queuelinked.add("凌统");
		queuelinked.offer("太史慈");
		queuelinked.offer("太史慈");
		queuelinked.offer("甘宁");
		queuelinked.offer("周泰");
System.out.println("peek:"+queuelinked.peek());
		System.out.println(queuelinked);

优先队列 PriorityQueue

 PriorityQueue 实现了 Queue 接口,不允许放入 null 元素;其通过堆实现,具体说是

通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不

大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue 的底层实现,

数组初始大小为11;也可以用一棵完全二叉树表示。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(java)


public class test02 {
	public static void main(String[] args) {
		Queue<String> queue = new PriorityQueue<String>(new Comparator<String>() {
			
			@Override
			public int compare(String o1, String o2) {
				// TODO Auto-generated method stub
				Integer n1 = Integer.parseInt(o1.substring(3));
				Integer n2 = Integer.parseInt(o2.substring(3));
				if(o1.charAt(0)==o2.charAt(0)) {
					return n1-n2;
				}else {
					return o1.charAt(0)-o2.charAt(0);
				}
				
			}
			
		});
		queue.offer("A刘备3");
		queue.offer("A曹操1");
		queue.offer("A孙权2");
		queue.offer("B袁绍2");
		queue.offer("B董卓1");
		System.out.println(queue);
		while(!queue.isEmpty()) {
			System.out.println(queue.poll());
		}
	}
}

通过重写Comparator来设定比较规则,即设定优先队列的优先规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值