java实现最大堆、最小堆并封装为优先队列类。

以下是Java实现最大堆、最小堆并封装为优先队列类的完整代码:


import java.util.Arrays;

import java.util.Comparator;


public class PriorityQueue {

    private static final int DEFAULT_CAPACITY = 11;

    private Object[] heap;

    private int size;

    private final Comparator comparator;


    // 最小堆构造

    public PriorityQueue() {

        this(DEFAULT_CAPACITY, null);

    }


    // 自定义比较器构造

    public PriorityQueue(Comparator comparator) {

        this(DEFAULT_CAPACITY, comparator);

    }


    public PriorityQueue(int initialCapacity, Comparator comparator) {

        this.heap = new Object[initialCapacity];

        this.comparator = comparator;

    }


    // 插入元素

    public void offer(T item) {

        if (item == null) throw new NullPointerException();

        if (size >= heap.length) grow();

        heap[size] = item;

        siftUp(size);

        size++;

    }


    // 获取堆顶元素

    @SuppressWarnings("unchecked")

    public T peek() {

        return (size == 0) ? null : (T) heap[0];

    }


    // 移除堆顶元素

    @SuppressWarnings("unchecked")

    public T poll() {

        if (size == 0) return null;

        T result = (T) heap[0];

        heap[0] = heap[--size];

        heap[size] = null;

        if (size > 0) siftDown(0);

        return result;

    }


    public int size() { return size; }

    public boolean isEmpty() { return size == 0; }


    private void grow() {

        int newCapacity = heap.length + (heap.length < 64 ? heap.length : heap.length >> 1);

        heap = Arrays.copyOf(heap, newCapacity);

    }


    @SuppressWarnings("unchecked")

    private void siftUp(int k) {

        while (k > 0) {

            int parent = (k - 1) >>> 1;

            if (compare((T) heap[k], (T) heap[parent]) >= 0) break;

            swap(k, parent);

            k = parent;

        }

    }


    @SuppressWarnings("unchecked")

    private void siftDown(int k) {

        int half = size >>> 1;

        while (k < half) {

            int child = (k << 1) + 1;

            int right = child + 1;

            if (right < size && compare((T) heap[child], (T) heap[right]) > 0)

                child = right;

            if (compare((T) heap[k], (T) heap[child]) <= 0) break;

            swap(k, child);

            k = child;

        }

    }


    @SuppressWarnings("unchecked")

    private int compare(T a, T b) {

        return comparator == null ? ((Comparable) a).compareTo(b) : comparator.compare(a, b);

    }


    private void swap(int i, int j) {

        Object temp = heap[i];

        heap[i] = heap[j];

        heap[j] = temp;

    }

}

 class HeapDemo {

    public static void main(String[] args) {

        // 最小堆

        PriorityQueue minHeap = new PriorityQueue<>();

        minHeap.offer(5);

        minHeap.offer(2);

        minHeap.offer(8);

        System.out.println("Min Heap: " + minHeap.poll()); // 2


        // 最大堆

        PriorityQueue maxHeap = new PriorityQueue<>((a, b) -> b - a);

        maxHeap.offer(5);

        maxHeap.offer(2);

        maxHeap.offer(8);

        System.out.println("Max Heap: " + maxHeap.poll()); // 8

    }

}



该实现包含动态扩容、泛型支持和自定义比较器功能,通过调整比较逻辑可轻松切换最大/最小堆模式。PriorityQueue类提供标准队列操作接口,内部使用数组实现堆结构。

http://bbs.zgjzs.org

http://news.zgjzs.org

http://blog.zgjzs.org

http://mall.zgjzs.org

http://shop.zgjzs.org

http://vip.zgjzs.org

http://m.zgjzs.org

http://wap.zgjzs.org

http://app.zgjzs.org

http://down.zgjzs.org

http://data.zgjzs.org

http://pic.zgjzs.org

http://img.zgjzs.org

http://video.zgjzs.org

http://music.zgjzs.org

http://game.zgjzs.org

http://edu.zgjzs.org

http://job.zgjzs.org

http://house.zgjzs.org

http://car.zgjzs.org

http://travel.zgjzs.org

http://food.zgjzs.org

http://health.zgjzs.org

http://tech.zgjzs.org

http://finance.zgjzs.org

http://stock.zgjzs.org

http://fund.zgjzs.org

http://lottery.zgjzs.org

http://sports.zgjzs.org

http://live.zgjzs.org

http://tv.zgjzs.org

http://movie.zgjzs.org

http://book.zgjzs.org

http://art.zgjzs.org

http://baby.zgjzs.org

http://pet.zgjzs.org

http://fashion.zgjzs.org

http://beauty.zgjzs.org

http://love.zgjzs.org

http://wedding.zgjzs.org

http://home.zgjzs.org

http://ren.zgjzs.org

http://ask.zgjzs.org

http://search.zgjzs.org

http://map.zgjzs.org

http://mail.zgjzs.org

http://cloud.zgjzs.org

http://pay.zgjzs.org

http://bank.zgjzs.org

http://gov.zgjzs.org

http://service.shangpin.org

http://member.shangpin.org

http://help.shangpin.org

http://info.shangpin.org

http://support.shangpin.org

http://account.shangpin.org

http://login.shangpin.org

http://register.shangpin.org

http://api.shangpin.org

http://static.shangpin.org

http://cdn.shangpin.org

http://image.shangpin.org

http://photo.shangpin.org

http://upload.shangpin.org

http://download.shangpin.org

http://file.shangpin.org

http://doc.shangpin.org

http://office.shangpin.org

http://work.shangpin.org

http://team.shangpin.org

http://group.shangpin.org

http://project.shangpin.org

http://task.shangpin.org

http://event.shangpin.org

http://calendar.shangpin.org

http://schedule.shangpin.org

http://meeting.shangpin.org

http://chat.shangpin.org

http://message.shangpin.org

http://forum.shangpin.org

http://community.shangpin.org

http://club.shangpin.org

http://activity.shangpin.org

http://market.shangpin.org

http://trade.shangpin.org

http://business.shangpin.org

http://company.shangpin.org

http://enterprise.shangpin.org

http://industry.shangpin.org

http://product.shangpin.org

http://goods.shangpin.org

http://item.shangpin.org

http://brand.shangpin.org

http://category.shangpin.org

http://order.shangpin.org

http://cart.shangpin.org

http://buy.shangpin.org

http://sell.shangpin.org

http://auction.shangpin.org

http://bid.shangpin.org

http://admin.snjrw.org

http://manage.snjrw.org

http://system.snjrw.org

http://portal.snjrw.org

http://center.snjrw.org

http://platform.snjrw.org

http://dashboard.snjrw.org

http://console.snjrw.org

http://control.snjrw.org

http://monitor.snjrw.org

http://report.snjrw.org

http://analysis.snjrw.org

http://statistics.snjrw.org

http://bigdata.snjrw.org

http://ai.snjrw.org

http://robot.snjrw.org

http://smart.snjrw.org

http://iot.snjrw.org

http://vr.snjrw.org

http://ar.snjrw.org

http://blockchain.snjrw.org

http://crypto.snjrw.org

http://nft.snjrw.org

http://meta.snjrw.org

http://web3.snjrw.org

http://dao.snjrw.org

http://defi.snjrw.org

http://mining.snjrw.org

http://wallet.snjrw.org

http://exchange.snjrw.org

http://token.snjrw.org

http://coin.snjrw.org

http://digital.snjrw.org

http://virtual.snjrw.org

http://cyber.snjrw.org

http://security.snjrw.org

http://safe.snjrw.org

http://protect.snjrw.org

http://firewall.snjrw.org

http://antivirus.snjrw.org

http://privacy.snjrw.org

http://encrypt.snjrw.org

http://decode.snjrw.org

http://hack.snjrw.org

http://bug.snjrw.org

http://patch.snjrw.org

http://update.snjrw.org

http://upgrade.snjrw.org

http://fix.snjrw.org

http://debug.snjrw.org

请使用浏览器的分享功能分享到微信等