根据20,80原则生成随机数据

package com.wzs;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 根据20,80原则生成数据,假如:0-100之间生成100次数,0-20之间要生成80次,30-100之间生成20次
 */
public class RandomArray {
	// 数据生成区间 numberRandomStart -- numberRandomEnd
	private int numberRandomStart;
	private int numberRandomEnd;
	// 生成数据量 numberSum
	private int numberSum;

	/**
	 * 默认空构造方法
	 */
	public RandomArray() {

	}

	/**
	 * 完整构造方法
	 * 
	 * @param numberRandomStart
	 *            数据生成区间开始
	 * @param numberRandomEnd
	 *            数据生成区间结束
	 * @param numberSum
	 *            成成数据量
	 */
	public RandomArray(int numberRandomStart, int numberRandomEnd, int numberSum) {
		this.numberRandomStart = numberRandomStart;
		this.numberRandomEnd = numberRandomEnd;
		this.numberSum = numberSum;
	}

	/**
	 * 得到随机数组
	 * 
	 * @return 随机数组
	 */
	public List<Integer> getRandomArrayList() {
		// 热数据需求总量
		int hotNumberToteTimes = (int) (numberSum * 0.8);
		// 冷数据需求总量
		int coldNumberToteTimes = numberSum - hotNumberToteTimes;

		List<Integer> randomArrayList = new ArrayList<Integer>();
		// 默认热数据从numberRandomStart开始,占有数据总量的20%
		int hotNumberStart = numberRandomStart;
		int hotNumberEnd = (int) ((numberRandomEnd - numberRandomStart + 1) * 0.2) + numberRandomStart;
		// 添加热数据
		for (int i = 0; i < hotNumberToteTimes; i++) {
			randomArrayList.add(getRandomNumber(hotNumberStart, hotNumberEnd));
		}
		// 添加冷数据
		for (int i = 0; i < coldNumberToteTimes; i++) {
			randomArrayList.add(getRandomNumber(hotNumberEnd, numberRandomEnd));
		}

		// 生成原数据
		System.out.println("数据长度:" + randomArrayList.size());
		System.out.println("生成元数据:" + randomArrayList);
		Collections.shuffle(randomArrayList);
		System.out.println("打乱后数据:" + randomArrayList);

		return randomArrayList;
	}

	/**
	 * 得到随机数
	 * 
	 * @param numberStart
	 *            随机数开始位置
	 * @param numberEnd
	 *            随机数结束为止
	 * @return
	 */
	public int getRandomNumber(int numberStart, int numberEnd) {
		int randomNumber = (int) Math.round(Math.random() * (numberEnd - numberStart) + numberStart);
		return randomNumber;
	}

	/**
	 * 测试函数
	 * 
	 * @param args
	 */

	public static void main(String[] args) {
		RandomArray randomArray = new RandomArray(0, 10, 20);
		System.out.println(randomArray.getRandomArrayList());
	}
}

输出结果:

数据长度:20
生成元数据:[2, 1, 0, 1, 2, 1, 1, 1, 1, 1, 1, 0, 1, 2, 0, 2, 10, 9, 7, 10]
打乱后数据:[0, 9, 2, 1, 2, 1, 10, 2, 0, 2, 10, 7, 1, 1, 1, 1, 0, 1, 1, 1]
[0, 9, 2, 1, 2, 1, 10, 2, 0, 2, 10, 7, 1, 1, 1, 1, 0, 1, 1, 1]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值