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]