java按权重随机算法

2024-06-13 16:08
文章标签 java 算法 随机 权重

本文主要是介绍java按权重随机算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 /*** @Description 方法描述:权重随机* @author leon 2018年1月26日 下午3:54:32* @CopyRight leon* @param map* @return*/public static String weightRandom(Map<String, String> map) {Set<String> keySet = map.keySet();List<String> weights = new ArrayList<String>();for (Iterator<String> it = keySet.iterator(); it.hasNext();) {String weightStr = it.next();int weight = Integer.valueOf(map.get(weightStr));for (int i = 0; i <= weight; i++) {weights.add(weightStr);}}int idx = RandomUtil.getRandomNum(weights.size());return weights.get(idx);}public static void main(String[] args) {Map<String, String> map = new HashMap<>();map.put("a", "5");map.put("b", "2");map.put("c", "2");map.put("d", "1");for (int v = 1; v <= 10; v++) {System.out.println("第" + v + "批次执行");int aT = 0;int bT = 0;int cT = 0;int dT = 0;for (int i = 0; i < 1000; i++) {String result = weightRandom(map);if (result.equals("a")) {aT++;} else if (result.equals("b")) {bT++;} else if (result.equals("c")) {cT++;} else if (result.equals("d")) {dT++;}}System.out.println("a出现" + aT + "次");System.out.println("b出现" + bT + "次");System.out.println("c出现" + cT + "次");System.out.println("d出现" + dT + "次");}}

main方法运行10批次,每批次执行1000次,达到预期效果:按权重随机

第1批次执行
a出现417次
b出现222次
c出现196次
d出现165次
第2批次执行
a出现416次
b出现231次
c出现221次
d出现132次
第3批次执行
a出现419次
b出现208次
c出现215次
d出现158次
第4批次执行
a出现432次
b出现199次
c出现220次
d出现149次
第5批次执行
a出现443次
b出现201次
c出现217次
d出现139次
第6批次执行
a出现401次
b出现234次
c出现220次
d出现145次
第7批次执行
a出现411次
b出现226次
c出现203次
d出现160次
第8批次执行
a出现448次
b出现206次
c出现210次
d出现136次
第9批次执行
a出现444次
b出现197次
c出现232次
d出现127次
第10批次执行
a出现437次
b出现212次
c出现216次
d出现135次

这篇关于java按权重随机算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1057777

相关文章

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

《SpringBoot整合SSE的高级实践(Server-SentEvents)》SSE(Server-SentEvents)是一种基于HTTP协议的单向通信机制,允许服务器向浏览器持续发送实... 目录1、简述2、Spring Boot 中的SSE实现2.1 添加依赖2.2 实现后端接口2.3 配置超时时

Spring Boot读取配置文件的五种方式小结

《SpringBoot读取配置文件的五种方式小结》SpringBoot提供了灵活多样的方式来读取配置文件,这篇文章为大家介绍了5种常见的读取方式,文中的示例代码简洁易懂,大家可以根据自己的需要进... 目录1. 配置文件位置与加载顺序2. 读取配置文件的方式汇总方式一:使用 @Value 注解读取配置方式二

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

JAVA保证HashMap线程安全的几种方式

《JAVA保证HashMap线程安全的几种方式》HashMap是线程不安全的,这意味着如果多个线程并发地访问和修改同一个HashMap实例,可能会导致数据不一致和其他线程安全问题,本文主要介绍了JAV... 目录1. 使用 Collections.synchronizedMap2. 使用 Concurren

Java Response返回值的最佳处理方案

《JavaResponse返回值的最佳处理方案》在开发Web应用程序时,我们经常需要通过HTTP请求从服务器获取响应数据,这些数据可以是JSON、XML、甚至是文件,本篇文章将详细解析Java中处理... 目录摘要概述核心问题:关键技术点:源码解析示例 1:使用HttpURLConnection获取Resp

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用