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

Java實(shí)現(xiàn)權(quán)重隨機(jī)獲取值或?qū)ο蟮姆椒?/h1>
 更新時(shí)間:2023年11月08日 09:45:35   作者:你就像甜甜的益達(dá)  
這篇文章主要介紹了Java實(shí)現(xiàn)權(quán)重隨機(jī)獲取值或?qū)ο蟮姆椒?treeMap是一種基于紅黑樹(shù)實(shí)現(xiàn)的有序映射表,提供了一系列的方法來(lái)操作映射表中的元素,其中tailMap方法是用于返回映射表中大于或等于給定鍵的部分視圖,需要的朋友可以參考下

場(chǎng)景

按照權(quán)重2,8給用戶分組為A,B,

TreeMap.tailMap方法

treeMap是一種基于紅黑樹(shù)實(shí)現(xiàn)的有序映射表,提供了一系列的方法來(lái)操作映射表中的元素。其中tailMap方法是用于返回映射表中大于或等于給定鍵的部分視圖。

tailMap方法的定義如下:

   public NavigableMap<K,V> tailMap(K fromKey, boolean inclusive) {
        return new AscendingSubMap<>(this,
                                     false, fromKey, inclusive,
                                     true,  null,    true);
    }

其中,fromKey表示起始鍵,返回一個(gè)從fromKey開(kāi)始到映射表末尾的部分視圖。inclusive是表示是否包含傳入的fronKey.這個(gè)部分視圖是SortedMap類型的,可以進(jìn)行排序操作。

使用tailMap方法需要注意以下幾點(diǎn):

  • 如果fromKey不存在于映射表中,則返回的部分視圖將包含大于fromKey的所有鍵值對(duì)。
  • 返回的部分視圖是映射表的一個(gè)視圖,對(duì)這個(gè)視圖所做的修改會(huì)影響到原映射表。
  • 返回的部分視圖是有序的,可以進(jìn)行排序操作。

下面是一個(gè)示例代碼:

import java.util.TreeMap;
import java.util.SortedMap;

public class TreeMapExample {
    public static void main(String[] args) {
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        treeMap.put(1, "one");
        treeMap.put(2, "two");
        treeMap.put(3, "three");
        treeMap.put(4, "four");
        treeMap.put(5, "five");

        // 返回大于等于3的部分視圖
        SortedMap<Integer, String> tailMap = treeMap.tailMap(3);
        System.out.println(tailMap); // 輸出 {3=three, 4=four, 5=five}

        // 修改部分視圖
        tailMap.put(6, "six");
        System.out.println(treeMap); // 輸出 {1=one, 2=two, 3=three, 4=four, 5=five, 6=six}

        // 對(duì)部分視圖進(jìn)行排序
        SortedMap<Integer, String> sortedTailMap = tailMap.descendingMap();
        System.out.println(sortedTailMap); // 輸出 {6=six, 5=five, 4=four, 3=three}
    }
}

在上面的示例代碼中,首先創(chuàng)建了一個(gè)treeMap對(duì)象,并向其中添加了5個(gè)鍵值對(duì)。然后使用tailMap方法返回了大于等于3的部分視圖,并對(duì)這個(gè)部分視圖進(jìn)行了修改和排序操作。

tailMap方法是Java中treeMap類提供的一個(gè)非常有用的方法,可以方便地獲取映射表中大于等于指定鍵的部分視圖,并進(jìn)行排序和修改操作。 針對(duì)這個(gè)特性可以用來(lái)獲取權(quán)重值

簡(jiǎn)單分析

好比A:B的權(quán)重為2:8,那么相當(dāng)于A的權(quán)重為0->2,B的權(quán)重為2->10(2+8)都是包左不包右的; 那我們就可以隨機(jī)個(gè)0-10的值,如果在0->2那么返回A,如果2->10那就返回B

使用隨機(jī)值

  public static String test1() {
        Random random = new Random();
        int i = random.nextInt(10);
        if (i < 2) {
            return "A";
        } else if (i >= 2 && i < 10) {
            return "B";
        } else {
            return "C";
        }
    }

使用treemap實(shí)現(xiàn)權(quán)重取值

   public static String test2() {
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        int total = 2 + 8;
        treeMap.put(2, "A");
        treeMap.put(total, "B");
        Random random = new Random();
        return treeMap.tailMap(random.nextInt(total), false).firstEntry().getValue();
    }

將Int改為Double稍微準(zhǔn)確一點(diǎn),因?yàn)閐ouble隨機(jī)的值更加多

   public static String test3() {
        TreeMap<Double, String> treeMap = new TreeMap<>();
        int total = 2 + 8;
        treeMap.put((double) 2, "A");
        treeMap.put((double) total, "B");
        Random random = new Random();
        return treeMap.tailMap(total * random.nextDouble(), false).firstEntry().getValue();
    }

測(cè)試main方法

package com.study.springbootplus.test;

import cn.hutool.core.lang.WeightRandom;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.TreeMap;

/**
 * @ClassName RandomTest
 * @Author yida
 * @Date 2023-09-14 18:26
 * @Description RandomTest
 */
public class RandomTest {

    public static void main(String[] args) {
        int num_a = 0, num_b = 0, num_c = 0;
        int testCount = 1000;
        for (int i = 0; i < testCount; i++) {
            switch (test3()) {
                case "A":
                    num_a = num_a + 1;
                    break;
                case "B":
                    num_b = num_b + 1;
                    break;
                case "C":
                    num_c = num_c + 1;
                    break;
            }
        }
        System.out.println("A-" + num_a + "-------" + NumberUtil.div(num_a, testCount, 2) * 100 + "%");
        System.out.println("B-" + num_b + "-------" + NumberUtil.div(num_b, testCount, 2) * 100 + "%");
        System.out.println("C-" + num_c + "-------" + NumberUtil.div(num_c, testCount, 2) * 100 + "%");

    }

    public static String test1() {
        Random random = new Random();
        int i = random.nextInt(10);
        if (i < 2) {
            return "A";
        } else if (i >= 2 && i < 10) {
            return "B";
        } else {
            return "C";
        }
    }

    public static String test2() {
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        int total = 2 + 8;
        treeMap.put(2, "A");
        treeMap.put(total, "B");
        Random random = new Random();
        return treeMap.tailMap(random.nextInt(total), false).firstEntry().getValue();
    }

    public static String test3() {
        TreeMap<Double, String> treeMap = new TreeMap<>();
        int total = 2 + 8;
        treeMap.put((double) 2, "A");
        treeMap.put((double) total, "B");
        Random random = new Random();
        return treeMap.tailMap(total * random.nextDouble(), false).firstEntry().getValue();
    }

    public static void test() {
        List<WeightRandom.WeightObj<String>> weightList = new ArrayList<>();
        weightList.add(new WeightRandom.WeightObj<>("A", 20));
        weightList.add(new WeightRandom.WeightObj<>("B", 30));
        weightList.add(new WeightRandom.WeightObj<>("C", 40));
        weightList.add(new WeightRandom.WeightObj<>("D", 10));
        WeightRandom<String> wr = RandomUtil.weightRandom(weightList);
        String str = "";
        int num_a = 0, num_b = 0, num_c = 0, num_d = 0;
        int testCount = 10000;
        for (int i = 0; i < testCount; i++) {
            str = wr.next();
            switch (str) {
                case "A":
                    num_a = num_a + 1;
                    break;
                case "B":
                    num_b = num_b + 1;
                    break;
                case "C":
                    num_c = num_c + 1;
                    break;
                case "D":
                    num_d = num_d + 1;
                    break;
            }
        }
        System.out.println("A-" + num_a + "-------" + NumberUtil.div(num_a, testCount, 2) * 100 + "%");
        System.out.println("B-" + num_b + "-------" + NumberUtil.div(num_b, testCount, 2) * 100 + "%");
        System.out.println("C-" + num_c + "-------" + NumberUtil.div(num_c, testCount, 2) * 100 + "%");
        System.out.println("D-" + num_d + "-------" + NumberUtil.div(num_d, testCount, 2) * 100 + "%");
    }


}

測(cè)試結(jié)果:

A-195-------20.0%
B-805-------81.0%
C-0-------0.0%

當(dāng)權(quán)重的參數(shù)比較多,那么建議使用hutool封裝的

到此這篇關(guān)于Java實(shí)現(xiàn)權(quán)重隨機(jī)獲取值或?qū)ο蟮姆椒ǖ奈恼戮徒榻B到這了,更多相關(guān)Java權(quán)重隨機(jī)獲取值或?qū)ο髢?nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 基于Properties文件中的空格問(wèn)題

    基于Properties文件中的空格問(wèn)題

    這篇文章主要介紹了Properties文件中的空格問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)

    SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine)

    這篇文章主要介紹了SpringBoot+SpringCache實(shí)現(xiàn)兩級(jí)緩存(Redis+Caffeine),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java簡(jiǎn)單工廠和工廠方法模式詳細(xì)解析

    Java簡(jiǎn)單工廠和工廠方法模式詳細(xì)解析

    這篇文章主要介紹了Java簡(jiǎn)單工廠和工廠方法模式詳細(xì)解析,簡(jiǎn)單工廠模式屬于類的創(chuàng)新型模式,又叫靜態(tài)工廠方法模式是通過(guò)專門定義一個(gè)類來(lái)負(fù)責(zé)創(chuàng)建其他類的實(shí)例,被創(chuàng)建的實(shí)例通常都具有共同的父類,需要的朋友可以參考下
    2023-12-12
  • Java與MySQL時(shí)間不一致問(wèn)題解決

    Java與MySQL時(shí)間不一致問(wèn)題解決

    本文主要介紹了Java與MySQL時(shí)間不一致問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • JAVA提高第九篇 集合體系

    JAVA提高第九篇 集合體系

    這篇文章主要為大家詳細(xì)介紹了JAVA提高第九篇集合體系的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Service層異常拋到Controller層處理還是直接處理問(wèn)題分析

    Service層異常拋到Controller層處理還是直接處理問(wèn)題分析

    這篇文章主要為大家介紹了Service層異常拋到Controller層處理還是直接處理的問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • logback?EvaluatorFilter日志過(guò)濾器源碼解讀

    logback?EvaluatorFilter日志過(guò)濾器源碼解讀

    這篇文章主要為大家介紹了logback?EvaluatorFilter日志過(guò)濾器源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 詳解在Spring3中使用注解(@Scheduled)創(chuàng)建計(jì)劃任務(wù)

    詳解在Spring3中使用注解(@Scheduled)創(chuàng)建計(jì)劃任務(wù)

    本篇文章主要介紹了詳解在Spring3中使用注解(@Scheduled)創(chuàng)建計(jì)劃任務(wù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • SpringBoot集成mybatis實(shí)例

    SpringBoot集成mybatis實(shí)例

    本篇文章主要介紹了SpringBoot集成mybatis實(shí)例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Java訪問(wèn)修飾符原理及代碼解析

    Java訪問(wèn)修飾符原理及代碼解析

    這篇文章主要介紹了Java訪問(wèn)修飾符原理及代碼解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06

最新評(píng)論

珲春市| 平果县| 三台县| 天台县| 勃利县| 陆川县| 南城县| 甘泉县| 班戈县| 河北区| 水城县| 涞源县| 涞源县| 黄陵县| 峨眉山市| 离岛区| 临漳县| 巴彦县| 保定市| 龙陵县| 雅江县| 桐梓县| 图们市| 互助| 新宾| 卢湾区| 麦盖提县| 二手房| 紫云| 岳阳县| 潮安县| 西充县| 河北省| 奈曼旗| 云和县| 若羌县| 奉化市| 改则县| 古丈县| 宜阳县| 孟连|