欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java之优先队列—PriorityQueue

程序员文章站 2024-02-15 07:58:46
...

PriorityQueue

priorityQueue是Java封装的优先*队列,它基于的是优先级堆
对于基本数据类型默认小顶堆,对于引用类型基于的是Comparator接口。
如果引用类型没有基于Comparator接口的外比较器,则会报错。

构造方法

	public PriorityQueue() {
		//调用的是有参构造方法
		//优先队列初始化大小为11,比较器为空
        this(DEFAULT_INITIAL_CAPACITY, null);
	}

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


	public PriorityQueue(int initialCapacity) {
        this(initialCapacity, null);
	}


	public PriorityQueue(int initialCapacity,
					Comparator<? super E> comparator) {
		//以上构造方法全部基于此构造方法进行实例化
        if (initialCapacity < 1)
            throw new IllegalArgumentException();
        this.queue = new Object[initialCapacity];
        this.comparator = comparator;
	}

	//此构造方法是将SortedSet转化为优先队列
	public PriorityQueue(Collection<? extends E> c) {
        if (c instanceof SortedSet<?>) {
            SortedSet<? extends E> ss = (SortedSet<? extends E>) c;
            this.comparator = (Comparator<? super E>) ss.comparator();
            initElementsFromCollection(ss);
        }
        else if (c instanceof PriorityQueue<?>) {
            PriorityQueue<? extends E> pq = (PriorityQueue<? extends E>) c;
            this.comparator = (Comparator<? super E>) pq.comparator();
            initFromPriorityQueue(pq);
        }
        else {
            this.comparator = null;
            initFromCollection(c);
        }
	}

	//优先队列的派生类转化为优先队列
	public PriorityQueue(PriorityQueue<? extends E> c) {
        this.comparator = (Comparator<? super E>) c.comparator();
        initFromPriorityQueue(c);
    }

常用的方法

Java之优先队列—PriorityQueue