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;
	}

    }
}
时间: 2024-08-28 13:32:09

java根据概率随机中奖 测试类的相关文章

Java连接MQ的实例, 测试类

package cjf.mq.mqclient; import com.ibm.mq.MQC; import com.ibm.mq.MQEnvironment; import com.ibm.mq.MQException; import com.ibm.mq.MQGetMessageOptions; import com.ibm.mq.MQMessage; import com.ibm.mq.MQPutMessageOptions; import com.ibm.mq.MQQueue; impo

Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。

#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类Truck是Car类的子类,其中包含的属性有载重量payload.每个 类都有构造方法和输出相关数据的方法.最后,写一个测试类来测试这些类的功 能. package hanqi; public class Vehicle { private int wheels; private int weight

Java测试类获取spring bean方法

Java测试类获取spring bean方法 http://blog.163.com/lizhenming_2008/blog/static/76558333201362094243911/ 1.通过spring上下文 ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationcontext.xml"); DataSource ds = (DataSource) ctx.getBean("d

java测试类调用LDAP服务器客户端信息实行增删改查

如下是我自写的java测试类调用客户端配置好的用户信息: package com; import java.io.UnsupportedEncodingException; import java.util.Arrays; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; impor

mongoDB工具类以及测试类【java】

java操作mongo工具类 package Utils; import com.mongodb.MongoClient; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCurs

Java基础知识综合练习_使用集合存储_高级银行系统的搭建(注册、登录、存取款、本行转账、跨行转账、销户、特殊操作参数、多个客户对象存入到银行类的集合,多个银行对象存入总测试类集合)

Java基础知识综合练习_使用集合存储_高级银行系统的搭建(注册.登录.存取款.本行转账.跨行转账.销户.特殊操作参数.多个客户对象存入到银行类的集合,多个银行对象存入总测试类集合) 1) 定义bank类 属性有银行名称和存放客户的ArrayList集合, 有开户方法. 销户方法. 存钱方法. 取钱方法. 转账方法(本行转账.跨行转账) 2) 定义customer类 属性有账户名.密码.余额 3) 定义测试类创建一个银行集合用于存放bank对象创建几个bank对象:分别叫华夏银行.工商银行.招商

JAVA测试类

用eclipse引入JUnit包 创建测试类 添加待测试类,我这里继承了之前创建的测试类,如果不继承的话  可以直接从测试类的test()里写测试代码 运行方式调成JUnit测试,完成

JAVA 测试类

@Test 是Junit 测试类的标志 . 在Junit4中还有的测试注解有:  @BeforeClass ,@Before,@Test,@After,@AfterClass 1.其中:@BeforeClass,@AfterClass是Junit4中新添加进去的 2.如果Run as --->Junit Test,运行含有@Test注释的方法是,那么所有注解方法都将被执行,所含的执行顺序是: @BeforeClass ,@Before,@Test,@After,@AfterClass 注释有@T

J2SE知识点归纳笔记(七)---Java IO Part 1:File类与RandomAccessFile类

J2SE知识点归纳笔记(七)---Java IO Part 1:File类与RandomAccessFile类                                                                 --转载请注明出处:coder-pig 本节引言: 兜兜转转,又回来写Java了,上一篇J2SE知识点归纳笔记(六)---Java常用类是上2014.4.14写的,时隔一年 又来重拾之前还没写完的系列了,前些天群里一个妹子反映她Java基础薄弱,然后抱怨在cs