Java 从一组数据随机选择并可设置出现概率

 1 import java.util.HashMap;
 2 import java.util.Map;
 3 import java.util.Random;
 4 
 5 
 6 
 7 public class Test {
 8 
 9     //String 可以为任意类型 也可以自定义类型
10     static Map<String, Integer> keyChanceMap = new HashMap<String,Integer>();
11     static{
12         keyChanceMap.put("出现比例为10的", 10);
13         keyChanceMap.put("出现比例为100的", 100);
14         keyChanceMap.put("出现比例为500的", 500);
15         keyChanceMap.put("出现比例为1000的", 1000);
16         keyChanceMap.put("出现比例为10000的", 10000);
17     }
18     
19     public static void main(String[] args) {
20         Map<String, Integer> count = new HashMap<String,Integer>();
21         for (int i = 0; i < 100000; i++) {
22             
23             
24             String item = chanceSelect(keyChanceMap);
25             
26             if (count.containsKey(item)) {
27                 count.put(item, count.get(item) + 1);
28             } else {
29                 count.put(item, 1);
30             }
31         }
32         
33         for(String id : count.keySet()){
34             System.out.println(id+"	出现了 "+count.get(id)+" 次");
35         }
36     }
37 
38     
39     public static String chanceSelect(Map<String, Integer> keyChanceMap) { 
40         if(keyChanceMap == null || keyChanceMap.size() == 0)  
41              return null;  
42           
43         Integer sum = 0;  
44         for (Integer value : keyChanceMap.values()) {  
45              sum += value;  
46         }  
47         // 从1开始  
48         Integer rand = new Random().nextInt(sum) + 1;  
49           
50         for (Map.Entry<String, Integer> entry : keyChanceMap.entrySet()) {
51             rand -= entry.getValue();
52             // 选中
53             if (rand <= 0) {
54                 String item = entry.getKey();
55                 return item;
56             }
57         } 
58           
59         return null;  
60    }
61 }
原文地址:https://www.cnblogs.com/wiker/p/3199215.html