java实现加权抽样_java 加权随机数实现

import java.util.HashMap; import java.util.Map; import java.util.Random; public class Test1 {     // String 可以为任意类型 也可以自定义类型     static Map keyChanceMap = new HashMap();     static { //        keyChanceMap.put("出现比例为10的", 10);         keyChanceMap.put("出现比例为40的", 4);         keyChanceMap.put("出现比例为20的", 2);         keyChanceMap.put("出现比例为10的", 1);         keyChanceMap.put("出现比例为30的", 3);     }     public static void main(String[] args) {         Map count = new HashMap();         for (int i = 0; i < 100000; i++) {             String item = chanceSelect(keyChanceMap);             if (count.containsKey(item)) {                 count.put(item, count.get(item) + 1);             } else {                 count.put(item, 1);             }         }         for (String id : count.keySet()) {             System.out.println(id + "\t出现了 " + count.get(id) + " 次");         }     }     public static String chanceSelect(Map keyChanceMap) {         if (keyChanceMap == null || keyChanceMap.size() == 0)             return null;         Integer sum = 0;         for (Integer value : keyChanceMap.values()) {             sum += value;         }         // 从1开始         Integer rand = new Random().nextInt(sum) + 1;         for (Map.Entry entry : keyChanceMap.entrySet()) {             rand =rand- entry.getValue();             // 选中             if (rand <= 0) {                 String item = entry.getKey();                 return item;             }         }         return null;     } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值