首页 > 代码库 > java根据概率随机中奖 测试类
java根据概率随机中奖 测试类
最近要做一个宝箱抽奖的功能 自己先联系了一下,分别用 list和set 进行存储和抽取,做了一个时间消耗的对比,感觉list应该比set读取的要快些,但是这也不一定,希望大家能够共同讨论。
废话少说上代码:
package com.test.testRandom; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.Set; /** 根据概率获取奖品的测试类 */ public class TestRandom { public static void main(String[] args) { TestRandom tr = new TestRandom(); // 用List随机 long begin = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { tr.getGumByList(); } System.out.println("list使用时间:" + (System.currentTimeMillis() - begin)); // 用set随机 long begin1 = System.currentTimeMillis(); for (int i = 0; i < 100; i++) { tr.getGumBySet(); } System.out.println("set使用时间:" + (System.currentTimeMillis() - begin1)); } /* Set 获取 */ void getGumBySet() { int random = new Random().nextInt(100); int prizeRate = 0;// 中奖率 Iterator<Gem> it = initSetGems().iterator(); while (it.hasNext()) { Gem gem = it.next(); prizeRate += gem.getPriority(); if (random < prizeRate) { System.out.println("奖品为:" + gem.getName() + " 概率:" + gem.getPriority() + " 随机数random:" + random + " 概率基数prizeRate:" + prizeRate); break; } } } /** List 获取 */ void getGumByList() { int random = new Random().nextInt(100); int prizeRate = 0;// 中奖率 Iterator<Gem> it = initGems().iterator(); while (it.hasNext()) { Gem gem = it.next(); prizeRate += gem.getPriority(); if (random < prizeRate) { System.out.println("奖品为:" + gem.getName() + " 概率:" + gem.getPriority() + " 随机数random:" + random + " 概率基数prizeRate:" + prizeRate); break; } } } /** 初始化list */ List<Gem> initGems() { List<Gem> gums = new ArrayList<Gem>(); gums.add(new Gem("20", 20)); gums.add(new Gem("7", 7)); gums.add(new Gem("30", 30)); gums.add(new Gem("24", 40)); gums.add(new Gem("3", 3)); return gums; } /** 初始化set */ Set<Gem> initSetGems() { Set<Gem> gums = new HashSet<Gem>(); gums.add(new Gem("20", 20)); gums.add(new Gem("7", 7)); gums.add(new Gem("30", 30)); gums.add(new Gem("24", 40)); gums.add(new Gem("3", 3)); return gums; } /**奖品类*/ class Gem { /** 奖品名称 */ private String name; /** 奖品概率 */ private int priority; public Gem() { super(); } public Gem(String name, int priority) { super(); this.name = name; this.priority = priority; } @Override public String toString() { return "Gum [name=" + name + ", priority=" + priority + "]"; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPriority() { return priority; } public void setPriority(int priority) { this.priority = priority; } } }
java根据概率随机中奖 测试类
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。