PriorityQueue的排序规则

PriorityQueue默认是自然排序,但是如果使用了比较器,那么底层会维护一个大顶堆/小顶堆,所有的插入操作都会按照大顶堆或者小顶堆的规则去维护。

这里先用一个栗子来帮助理解,后续补上源码…

public static void main(String[] args) {
	 //小顶堆
		PriorityQueue<Integer> pq = new PriorityQueue<Integer>((o1,o2)->o1.compareTo(o2));
		pq.add(3);
		pq.add(1);
		pq.add(2);
		pq.add(4);
		for(Integer t:pq){
			System.out.print(t+" ");
		}
		System.out.println();
		while(pq.size()!=0){
			System.out.print(pq.remove()+" ");
		}
		System.out.println();
		PriorityQueue<String> ppq = new PriorityQueue<String>((o1,o2)->o1.compareTo(o2));
		// 入队只做简单的选择排序,和队头的数据进行比较,a加入后和a比较,abcd>a所以放在a的右边
		ppq.add("aaaa");
		ppq.add("cccc");
		ppq.add("a");
		ppq.add("abcd");
		for(String t:ppq){
			System.out.print(t+" ");
		}
		System.out.println();
		//出队会进行每次队头排序完成排序
		while(ppq.size()!=0){
			System.out.print(ppq.remove()+" ");
		}
		System.out.println();
	}

运算结果:

1 3 2 4 
1 2 3 4 
a abcd aaaa cccc 
a aaaa abcd cccc 

PriorityQueue中的add()和offer()

add(E e)和offer(E e)的语义相同,都是向优先队列中插入元素,只是Queue接口规定二者对插入失败时的处理不同,前者在插入失败时抛出异常,后则则会返回false。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值