亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java權重隨機的實現方法

2019-11-26 15:19:36
字體:
來源:轉載
供稿:網友

本文實例講述了Java權重隨機的實現方法。分享給大家供大家參考。具體分析如下:

權重隨機在項目中經常用到,所以我把它抽象到一個工具類中。

一般實現隨機權重有兩種方式:

1. 使用一個數組存放權重對應的實際目標,比如A的權重是2,B的權重是3,那么數組長度為5, 數組前兩個存放A,后三個存放B。

然后隨機一個[0-數據長度)的數字,直接取數組對應下標的值就可以了。

優點:數據結構簡單,算法高效,實現簡單

缺點:當權重值比較大同時數據又比較多的時候,會浪費內存

2. 使用區間算法,從前到后依次疊加權重,然后隨機一個[1-權重和]的數字,再用隨機的權重依次減去每個元素的權重,當第一個小于等于0的元素就是我們找元素

這里實現可以借用Arrays的binarySearch方法。

完整實例代碼點擊此處本站下載。

貼一下代碼:

WeightMeta.java:

復制代碼 代碼如下:
/**
 * 建議使用RandomUtil類創建RandomMeta對象
 * @author wxf on 14-5-5.
 */ 
public class WeightMeta<T> { 
    private final Random ran = new Random(); 
    private final T[] nodes; 
    private final int[] weights; 
    private final int maxW; 
 
    public WeightMeta(T[] nodes, int[] weights) { 
        this.nodes = nodes; 
        this.weights = weights; 
        this.maxW = weights[weights.length - 1]; 
    } 
 
    /**
     * 該方法返回權重隨機對象
     * @return
     */ 
    public T random() { 
        int index = Arrays.binarySearch(weights, ran.nextInt(maxW) + 1); 
        if (index < 0) { 
            index = -1 - index; 
        } 
        return nodes[index]; 
    } 
 
    public T random(int ranInt) { 
        if (ranInt > maxW) { 
            ranInt = maxW; 
        } else if(ranInt < 0){ 
            ranInt = 1; 
        } else { 
            ranInt ++; 
        } 
        int index = Arrays.binarySearch(weights, ranInt); 
        if (index < 0) { 
            index = -1 - index; 
        } 
        return nodes[index]; 
    } 
 
    @Override 
    public String toString() { 
        StringBuilder l1 = new StringBuilder(); 
        StringBuilder l2 = new StringBuilder("[random]/t"); 
        StringBuilder l3 = new StringBuilder("[node]/t/t"); 
        l1.append(this.getClass().getName()).append(":").append(this.hashCode()).append(":/n").append("[index]/t/t"); 
        for (int i = 0; i < weights.length; i++) { 
            l1.append(i).append("/t"); 
            l2.append(weights[i]).append("/t"); 
            l3.append(nodes[i]).append("/t"); 
        } 
        l1.append("/n"); 
        l2.append("/n"); 
        l3.append("/n"); 
        return l1.append(l2).append(l3).toString(); 
    } 
}

RandomUtil.java:

復制代碼 代碼如下:
/**
 * 隨機工具類
 *
 * 使用權重的集合Map構建隨機元數據對象
 *
 * 比如:
 * 我們有3個url地址,他們的權重分別為1,2,3現在我們利用RandomUtil來根據權重隨機獲取url:
 *
 * <p><blockquote><pre>
 *
 * map.put(url1, 1);
 * map.put(url2, 2);
 * map.put(url3, 3);
 * RandomMeta<String, Integer> md = RandomUtil.buildWeightMeta(map);
 * String weightRandomUrl = md.random();
 *
 * </pre></blockquote><p>
 *
 * @author wxf on 14-5-5.
 */ 
public class RandomUtil { 
    public static <T> WeightMeta<T> buildWeightMeta(final Map<T, Integer> weightMap) { 
        final int size = weightMap.size(); 
        Object[] nodes = new Object[size]; 
        int[] weights = new int[size]; 
        int index = 0; 
        int weightAdder = 0; 
        for (Map.Entry<T, Integer> each : weightMap.entrySet()) { 
            nodes[index] = each.getKey(); 
            weights[index++] = (weightAdder = weightAdder + each.getValue()); 
        } 
        return new WeightMeta<T>((T[]) nodes, weights); 
    } 
}

希望本文所述對大家的Java程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲一区二区三区五十路| 久久亚洲国产成人| 国产精品精品国产| 最近2019中文字幕大全第二页| 人九九综合九九宗合| 国产999在线| 懂色av一区二区三区| 91国内免费在线视频| 亚洲jizzjizz日本少妇| 欧美成人四级hd版| 热久久视久久精品18亚洲精品| 亚洲最新中文字幕| 色悠悠久久88| 欧美日韩国产在线播放| 黑丝美女久久久| 久久99国产综合精品女同| 亚洲高清免费观看高清完整版| 国产精品影院在线观看| 成人免费高清完整版在线观看| 欧美性猛交xxxx乱大交蜜桃| 亚洲精品自在久久| www.亚洲人.com| 国产精品久久久久久久久| 成人久久18免费网站图片| 亚洲精品国产综合久久| 国产成人精品一区| 亚洲免费视频在线观看| 国产精品自产拍在线观| 成人午夜小视频| 日韩欧美中文字幕在线观看| 亚洲成人a**站| 成人黄色在线观看| 久久久久这里只有精品| 欧美电影免费看| 中文字幕亚洲一区二区三区五十路| 青草成人免费视频| 国产精品99久久久久久久久| 久久中文精品视频| 亚洲国产高清福利视频| 国产成人精品免费久久久久| 91亚洲精品在线观看| 国产精品欧美一区二区| 美女视频黄免费的亚洲男人天堂| 成人a在线视频| 日韩美女在线观看| 国产精品三级久久久久久电影| 欧美激情精品久久久久久| 亚洲欧美色图片| 国产成人av在线播放| 日本一区二区三区在线播放| 亚洲精品电影网| 国产精品日韩在线一区| 亚洲精品98久久久久久中文字幕| 日日摸夜夜添一区| 欧美在线观看日本一区| 欧美性高潮在线| 久久久久久久久久久亚洲| 91在线观看免费高清完整版在线观看| 日韩精品亚洲精品| 永久免费精品影视网站| 日本午夜精品理论片a级appf发布| 亚洲精品美女久久久久| 亚洲男人天堂网站| 精品国产91久久久久久老师| 国产精品海角社区在线观看| 庆余年2免费日韩剧观看大牛| 日韩人体视频一二区| 欧美精品久久一区二区| 亚洲国产福利在线| 91久久久久久久久久久| 国产精品一区二区久久久| 色综合91久久精品中文字幕| 亚洲在线一区二区| 91精品国产精品| 欧美性色视频在线| 欧美精品videofree1080p| 91香蕉嫩草影院入口| 正在播放欧美视频| 91精品国产91久久久| 欧美成人精品xxx| 亚洲qvod图片区电影| 黑人巨大精品欧美一区二区一视频| www.亚洲天堂| 亚洲天堂男人的天堂| 欧美孕妇孕交黑巨大网站| 日韩av免费一区| 69久久夜色精品国产69乱青草| 精品国产91久久久久久| 亚洲天堂视频在线观看| 色一区av在线| 久久亚洲国产精品成人av秋霞| 8050国产精品久久久久久| 久久久久久久亚洲精品| 97超碰蝌蚪网人人做人人爽| 国产视频在线一区二区| 日韩av影院在线观看| 亚洲精品一区久久久久久| 国产欧美一区二区三区四区| y97精品国产97久久久久久| 国产精品黄页免费高清在线观看| 亚洲欧美日韩精品久久| 国产深夜精品福利| 国产精品露脸自拍| 国产精品情侣自拍| 国语自产在线不卡| 国产成人精品在线视频| 日韩美女福利视频| 国产日韩欧美黄色| 成人激情在线播放| 国产精品女主播| 日韩av影视综合网| 免费不卡在线观看av| 日韩中文字幕在线播放| 国产日韩欧美自拍| 亚洲精品99久久久久| 国产视频丨精品|在线观看| 亚洲一区二区三区视频播放| www.国产精品一二区| 中文字幕欧美视频在线| 中文字幕欧美日韩| 欧美日韩电影在线观看| 国内精品久久久久影院优| 俺去亚洲欧洲欧美日韩| 国产国产精品人在线视| 中文在线资源观看视频网站免费不卡| 国产日韩中文字幕在线| 亚洲性av网站| 亚洲国产免费av| 九九久久国产精品| 亚洲久久久久久久久久久| 最近的2019中文字幕免费一页| 91国产中文字幕| 成人情趣片在线观看免费| 欧美一乱一性一交一视频| 麻豆乱码国产一区二区三区| 久久精品小视频| 日韩黄色在线免费观看| 精品国产一区二区三区久久狼黑人| 亚洲国产又黄又爽女人高潮的| 亚洲高清一二三区| 国产精品99蜜臀久久不卡二区| 亚洲黄色av女优在线观看| 国产精品综合不卡av| 国产精品日日摸夜夜添夜夜av| 亲子乱一区二区三区电影| 国产精品成人一区二区三区吃奶| 久久天天躁狠狠躁夜夜爽蜜月| 91av成人在线| 久热精品视频在线免费观看| 久操成人在线视频| 在线观看成人黄色| 亚洲成年人在线播放| 日韩在线观看网址| 日韩av免费网站| 亚洲91精品在线观看| 亚洲欧美日韩精品久久| 日韩av片免费在线观看| 日韩精品在线观| 亚洲男人的天堂在线播放| 亚洲欧美日韩国产精品| 久久精品91久久香蕉加勒比| 久久精品视频在线播放| 亚洲综合国产精品| 亚洲精品久久久久中文字幕二区|