最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java堆&優(yōu)先級隊(duì)列示例講解(下)

 更新時間:2022年03月18日 11:23:49   作者:愛干飯的猿  
這篇文章主要通過示例詳細(xì)為大家介紹Java中的堆以及優(yōu)先級隊(duì)列,文中的示例代碼講解詳細(xì),對我們了解java有一定幫助,需要的可以參考一下

1.優(yōu)先級隊(duì)列

1.1 概念

在很多應(yīng)用中,我們通常需要按照優(yōu)先級情況對待處理對象進(jìn)行處理,比如首先處理優(yōu)先級最高的對象,然后處理次高的對象。最簡單的一個例子就是,在手機(jī)上玩游戲的時候,如果有來電,那么系統(tǒng)應(yīng)該優(yōu)先處理打進(jìn)來的電話。在這種情況下,我們的數(shù)據(jù)結(jié)構(gòu)應(yīng)該提供兩個最基本的操作,一個是返回最高優(yōu)先級對象,一個是添加新的對象。這種數(shù)據(jù)結(jié)構(gòu)就是優(yōu)先級隊(duì)列(Priority Queue)。

1.2 內(nèi)部原理

優(yōu)先級隊(duì)列的實(shí)現(xiàn)方式有很多,但最常見的是使用堆來構(gòu)建。

1.3 操作-入隊(duì)列

過程(以大堆為例):

1. 首先按尾插方式放入數(shù)組

2. 比較其和其雙親的值的大小,如果雙親的值大,則滿足堆的性質(zhì),插入結(jié)束

3. 否則,交換其和雙親位置的值,重新進(jìn)行 2 、 3 步驟

4. 直到根結(jié)點(diǎn)

圖示:

1.4 操作-出隊(duì)列(優(yōu)先級最高)

為了防止破壞堆的結(jié)構(gòu),刪除時并不是直接將堆頂元素刪除,而是用數(shù)組的最后一個元素替換堆頂元素,然后通過向下調(diào)整方式重新調(diào)整成堆

1.5 借用堆實(shí)現(xiàn)優(yōu)先級隊(duì)列

1.實(shí)現(xiàn)一個接口

public interface IQueue<E> {
    // 入隊(duì)
    void offer(E val);
    //出隊(duì)
    E poll();
    //返回隊(duì)首元素
    E peek();
    //判斷隊(duì)列是否為空
    boolean isEmpty();
}

2.堆完整代碼見Java堆&優(yōu)先級隊(duì)列示例講解(上)

3.優(yōu)先級隊(duì)列

/**
 * 基于最大堆的優(yōu)先級隊(duì)列,值越大優(yōu)先級越高
 * 隊(duì)首元素就是優(yōu)先級最大的元素(值最大)
 */
 
import stack_queue.queue.IQueue;
 
public class PriorityQueue implements IQueue<Integer> {
    MaxHeap heap = new MaxHeap();
    public PriorityQueue(){
        heap = new MaxHeap();
    }
 
    @Override
    public void offer(Integer val) {
        heap.add(val);
    }
 
    @Override
    public Integer poll() {
        return heap.extractMax();
    }
 
    @Override
    public Integer peek() {
        return heap.peekMax();
    }
 
    @Override
    public boolean isEmpty() {
        return heap.isEmpty();
    }
}

1.6 測試

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;
 
public class PriorityQueueTest {
    public static void main(String[] args) {
        // 通過構(gòu)造方法傳入比較器
        // 默認(rèn)是最小堆,"值"(比較器compare的返回值)越小,優(yōu)先級就越高
        // 當(dāng)傳入一個降序的比較器時,值(比較器compare的返回值,值越大,返回負(fù)數(shù))
//        Queue<Student> queue = new PriorityQueue<>(new StudentComDesc());
//        Queue<Student> queue = new PriorityQueue<>(new Comparator<Student>() {
//            @Override
//            public int compare(Student o1, Student o2) {
//                return o2.getAge() - o1.getAge();
//            }
//        });
        Queue<Student> queue = new PriorityQueue<>(new StudentCom());
        Student stu1 = new Student(18,"雷昊");
        Student stu2 = new Student(20,"張超");
        Student stu3 = new Student(16,"鉞浦");
        queue.offer(stu1);
        queue.offer(stu2);
        queue.offer(stu3);
        while (!queue.isEmpty()){
            System.out.println(queue.poll());
        }
    }
}
 
//升序(最小堆)
class StudentCom implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.getAge() - o2.getAge();
    }
}
 
//降序(最大堆)
class StudentComDesc implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        return o2.getAge() - o1.getAge();
    }
}
 
class Student{
    private int age;
    private String name;
 
    public int getAge() {
        return age;
    }
 
    public Student(int age, String name) {
        this.age = age;
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "Student{" +
                "age=" + age +
                ", name='" + name + '\'' +
                '}';
    }
}

結(jié)果如下:Java堆&優(yōu)先級隊(duì)列示例講解(上)

到此這篇關(guān)于Java堆&優(yōu)先級隊(duì)列示例講解(下)的文章就介紹到這了,更多相關(guān)Java 堆 優(yōu)先級隊(duì)列內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java的引用類型的詳細(xì)介紹

    java的引用類型的詳細(xì)介紹

    在java中提供了4個級別的引用:強(qiáng)引用、軟引用、弱引用、虛引用。其中強(qiáng)引用FinalReference是default個飾符來修飾,其它3個級別均為public修飾
    2013-10-10
  • RocketMQ?producer發(fā)送者淺析

    RocketMQ?producer發(fā)送者淺析

    RocketMQ生產(chǎn)者是一種高性能、可靠的消息發(fā)送者,能夠?qū)⑾⒖焖?、可靠地發(fā)送到RocketMQ消息隊(duì)列中。它具有多種消息發(fā)送模式和消息發(fā)送方式,可以根據(jù)不同的業(yè)務(wù)需求進(jìn)行靈活配置
    2023-04-04
  • Spring MVC 執(zhí)行流程的簡述

    Spring MVC 執(zhí)行流程的簡述

    這篇文章主要介紹了Spring MVC 執(zhí)行流程的簡述,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 詳解如何配置springboot跳轉(zhuǎn)html頁面

    詳解如何配置springboot跳轉(zhuǎn)html頁面

    這篇文章主要介紹了詳解如何配置springboot跳轉(zhuǎn)html頁面,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java文件字符輸入流FileReader讀取txt文件亂碼的解決

    Java文件字符輸入流FileReader讀取txt文件亂碼的解決

    這篇文章主要介紹了Java文件字符輸入流FileReader讀取txt文件亂碼的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java使用DualPivotQuicksort排序

    Java使用DualPivotQuicksort排序

    這篇文章主要介紹了Java使用DualPivotQuicksort排序,喜歡算法的同學(xué)一定要看一下
    2021-04-04
  • Java二叉搜索樹遍歷操作詳解【前序、中序、后序、層次、廣度優(yōu)先遍歷】

    Java二叉搜索樹遍歷操作詳解【前序、中序、后序、層次、廣度優(yōu)先遍歷】

    這篇文章主要介紹了Java二叉搜索樹遍歷操作,結(jié)合實(shí)例形式詳細(xì)分析了Java二叉搜索樹前序、中序、后序、層次、廣度優(yōu)先遍歷等相關(guān)原理與操作技巧,需要的朋友可以參考下
    2020-03-03
  • struts1實(shí)現(xiàn)簡單的登錄功能實(shí)例(附源碼)

    struts1實(shí)現(xiàn)簡單的登錄功能實(shí)例(附源碼)

    本篇文章主要介紹了struts1實(shí)現(xiàn)簡單的登錄功能實(shí)例(附源碼),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • Java/Spring項(xiàng)目的包開頭為什么是com詳解

    Java/Spring項(xiàng)目的包開頭為什么是com詳解

    這篇文章主要介紹了Java/Spring項(xiàng)目的包開頭為什么是com的相關(guān)資料,在Java中包命名遵循域名反轉(zhuǎn)規(guī)則,即使用公司的域名反轉(zhuǎn)作為包的前綴,以確保其全球唯一性和避免命名沖突,這種規(guī)則有助于邏輯分層、代碼可讀性提升和標(biāo)識代碼來源,需要的朋友可以參考下
    2024-10-10
  • Java function函數(shù)式接口的使用方法與實(shí)例

    Java function函數(shù)式接口的使用方法與實(shí)例

    這篇文章主要介紹了Java function函數(shù)式接口的使用方法與實(shí)例,函數(shù)式接口如一支未完成的詩篇,用Lambda表達(dá)式作韻腳,將代碼的機(jī)械美感與藝術(shù)的抽象融為一體,悄然重構(gòu)了開發(fā)者對代碼之美的認(rèn)知,需要的朋友可以參考下
    2025-02-02

最新評論

杭锦后旗| 玉山县| 黄山市| 祥云县| 徐汇区| 华容县| 广安市| 四子王旗| 濮阳县| 仁怀市| 灵石县| 神池县| 温泉县| 麻江县| 凤翔县| 建水县| 平和县| 保德县| 曲靖市| 邵东县| 崇礼县| 和硕县| 石城县| 丰宁| 宜君县| 枣强县| 乳山市| 商南县| 五华县| 澎湖县| 黄梅县| 和田市| 青岛市| 当阳市| 汝南县| 凤庆县| 鹤岗市| 明溪县| 睢宁县| 长海县| 乌恰县|