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

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

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

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

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)先級隊列(Priority Queue)。

1.2 內(nèi)部原理

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

1.3 操作-入隊列

過程(以大堆為例):

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

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

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

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

圖示:

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

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

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

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

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

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

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

/**
 * 基于最大堆的優(yōu)先級隊列,值越大優(yōu)先級越高
 * 隊首元素就是優(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)先級隊列示例講解(上)

到此這篇關(guān)于Java堆&優(yōu)先級隊列示例講解(下)的文章就介紹到這了,更多相關(guān)Java 堆 優(yōu)先級隊列內(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ū)⑾⒖焖佟⒖煽康匕l(fā)送到RocketMQ消息隊列中。它具有多種消息發(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é)合實例形式詳細(xì)分析了Java二叉搜索樹前序、中序、后序、層次、廣度優(yōu)先遍歷等相關(guān)原理與操作技巧,需要的朋友可以參考下
    2020-03-03
  • struts1實現(xiàn)簡單的登錄功能實例(附源碼)

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

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

    Java/Spring項目的包開頭為什么是com詳解

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

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

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

最新評論

邹平县| 永和县| 柳州市| 吴桥县| 牙克石市| 临沂市| 长泰县| 宁都县| 张家港市| 东乌珠穆沁旗| 开化县| 谢通门县| 进贤县| 大同县| 廉江市| 万荣县| 池州市| 邵阳县| 达拉特旗| 南安市| 全州县| 秦安县| 泸定县| 四会市| 嘉义县| 温泉县| 高清| 历史| 南郑县| 阜康市| 屏山县| 清远市| 平顶山市| 兖州市| 武功县| 绿春县| 盈江县| 平和县| 安康市| 石渠县| 泰安市|