PriorityQueue 添加元素、扩容 及 比较方法

PriorityQueue是Java中的优先队列,基于二叉堆实现。它默认是小顶堆,但可通过自定义比较器实现大顶堆。添加元素时,新元素会与父节点比较并可能上移。删除元素即删除最小/最大值,通过调整保持堆性质。队列为空时,remove()会抛出异常,而poll()会返回null。
摘要由CSDN通过智能技术生成

PriorityQueue
  • java.util.PriorityQueue<E>
  • 优先队列,优先级高的元素先出列
  • JDK使用二叉堆使得每次出队的元素总是队列里面最小的,元素的大小比较方法可以由用户指定,相当于自定义优先级
  • PriorityQueue默认是一个小顶堆,可以通过传入自定义的比较函数来实现大顶堆
1. Comparator 构造方法传参

	PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
   
			@Override
			public int compare(Integer o1, Integer o2) {
   
				 return o2-o1; 
			}
	});
	
2. 实现 Comparable 接口

	class ListNode implements Comparable<ListNode>{
   
		int val;
		ListNode next;
		
		ListNode() {
   }
		ListNode(int val){
   
			this.val = val;
		}
		ListNode(int val, ListNode next) {
    
			this.val = val; this.next = next; 
		}
		
		@Override
		public int compareTo(ListNode node){
   
			return node.val - this.val;
		}
	}

	Queue<ListNode> queue = new PriorityQueue<ListNode>();
	
  • 指定比较方法有两种方式
4.  覆写`Comparator`的`compare()`方法,此时可通过PriorityQueue的构造方法传入Comparator

		public PriorityQueue(Comparator<? super E> comparator) {
   
		        this(DEFAULT_INITIAL_CAPACITY, comparator);
		}

5.  覆写`Comparable`的`compareTo()`方法,此时PriorityQueue的元素要实现Comparable接口
底层相关
// 接口定义
$ 	public class PriorityQueue<E> extends AbstractQueue<E>
    	implements java.io.Serializable {
   ...}
    	
$	public abstract class AbstractQueue<E>
    	extends AbstractCollection<E>
    	implements Queue<E> {
   ...}
    	
$   public abstract class AbstractCollection<E> implements Collection<E> {
   ...}
$	public interface Queue<E> extends Collection<E> {
   ..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值