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; } }
java实现加权抽样_java 加权随机数实现
最新推荐文章于 2021-04-06 15:37:13 发布