import java.util.*;

/**
* 权重随机算法实现
* a b c d 对应权重范围 --- [0,1)、[1,3)、[3,6)、[6,10)
*/
public class RandomSF { private static TreeMap<String, Integer> hm = new TreeMap<>(); public static void main(String[] args) throws Exception {
TreeMap<String, Integer> randomMap = new TreeMap<String, Integer>();
randomMap.put("a", 1);
randomMap.put("b", 2);
randomMap.put("c", 3);
randomMap.put("d", 4);
Integer tmp = 0;
ArrayList<ElementWeight> arr = new ArrayList<ElementWeight>();
for (Map.Entry<String, Integer> entry : randomMap.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
ElementWeight ew = new ElementWeight(key, tmp, tmp + value);
tmp += value;
arr.add(ew);
}
Random random = new Random();
for (int j = 0; j < 100000000; j++) {
int i = random.nextInt(tmp);
String randomStr = binarySearch(arr, i);
countRandomStr(randomStr);
}
for (ElementWeight ew:arr) {
System.out.println(ew.getElement()+"的权重范围:"+"["+ew.getLow()+","+ew.getHigt()+")");
}
System.out.println(hm);
} // 二分查找实现
public static String binarySearch(ArrayList<ElementWeight> arr, int num) {
int high = arr.size();
int low = 0;
while (high >= low) {
int middle = (high + low) / 2;
ElementWeight ew = arr.get(middle);
if (num >= ew.getLow() && num < ew.getHigt()) {
return ew.getElement();
} else if (num >= ew.getHigt()) {
low = middle + 1;
} else if (num < ew.getLow()) {
high = middle - 1;
}
}
return null;
} // 权重元素实体类
static class ElementWeight {
private String element;
private Integer low;
private Integer higt; public ElementWeight(String element, Integer low, Integer higt) {
this.element = element;
this.low = low;
this.higt = higt;
} public String getElement() {
return element;
} public Integer getLow() {
return low;
} public Integer getHigt() {
return higt;
} } // 统计随机string的个数
public static void countRandomStr(String str) {
Integer value = hm.get(str);
if (value == null) {
hm.put(str, 1);
} else {
hm.put(str, ++value);
}
}
}

最新文章

  1. Spring BeanNameAutoProxyCreator 与 ProxyFactoryBean区别
  2. Swift3.0P1 语法指南——类和结构体
  3. HDU 1698 Just a Hook(线段树/区间更新)
  4. python(pymysql)之mysql简单操作
  5. Hibernate之Query接口的uniqueResult()方法
  6. VC6.0环境安装STLport-5.2.1
  7. .net远程连接oracle数据库不用安装oracle客户端
  8. 一步一步学c#(五):泛型
  9. codeforces584B Kolya and Tanya
  10. js关闭浏览器窗口事件
  11. 一个基于DpperHelper的t4模板
  12. PHP开发要点与技巧总结(一)
  13. java数据库(MySQL)之增删改查
  14. Python之MySQL基础
  15. [前端]css前端样式的模块化
  16. window10, java环境配置完后在cmd,输入java成功了,但为什么输入javac就失败了
  17. CNN试验记录
  18. Jquery实现点击表格行变色!
  19. ERROR 2002 (HY000): Can&#39;t connect to local MySQL server through socket &#39;/var/run/mysqld/mysqld.sock&#39; (2)
  20. 二十三、springboot之session共享

热门文章

  1. OpenTSDB(时序数据库官网)
  2. influxDB 0.9 C# 读写类
  3. Spring mvc Json 的正确返回姿势
  4. STL基础--算法(修改数据的算法)
  5. http系列(一)
  6. Java NIO系列教程(二) Channel通道介绍及FileChannel详解
  7. vue vue-resource 请求数据
  8. switch case 变量初始化问题
  9. BCGcontrolBar(七) 添加仪表盘、动态图表显示等控件
  10. visual studio 版本管理从tfs迁移到svn