Java 用随机的不重复的数字填充数组(我怎样才能更快地完成这项工作)?

Java 用随机的不重复的数字填充数组(我怎样才能更快地完成这项工作)?,java,arrays,Java,Arrays,假设我想用一组不重复的随机数填充一个数组。要求是,必须使用java.util.Random中的Random类,不能使用ArrayList(我已经使用Collections.shuffle完成了)。只能使用一维数组和任何类型的循环(包括if语句).为了解决这个问题,我制作了一个225的数组,随机数不允许超过225。这是我提出的解决方案,但它似乎不是很有效。我如何才能更快地完成此操作 我用1到225的随机数填充数组。我将数组中的每个元素与其他元素进行比较,如果有一个相似性,我将从0元素重新开始比较。

假设我想用一组不重复的随机数填充一个数组。要求是,必须使用
java.util.Random
中的Random类,不能使用ArrayList(我已经使用
Collections.shuffle
完成了)。只能使用一维数组和任何类型的循环(包括if语句).为了解决这个问题,我制作了一个225的数组,随机数不允许超过225。这是我提出的解决方案,但它似乎不是很有效。我如何才能更快地完成此操作

我用1到225的随机数填充数组。我将数组中的每个元素与其他元素进行比较,如果有一个相似性,我将从0元素重新开始比较。我在下面包含了我的源代码

    int [] value = new int[225]; 
    int randnum;
    Random num = new Random();

    for (int x = 0; x < value.length; x++) // Fills array with Random Numbers from 0 to 225
    {
        randnum = (num.nextInt(225)) + 1;
        value[x] = randnum;
    }

    for (int y = 0; y < value.length; y++) // These two loops compare each value of the array
    {
        for (int z = y + 1; z < value.length; z++)
        {
            while (value[y] == value[z])
            {
                value[y] = num.nextInt(225) + 1;
                y = 0; // If the loop runs, the entire looping process starts over again.
            }
        }
    }
int[]值=新的int[225];
int-randnum;
随机数=新随机数();
for(int x=0;x
如果您不能洗牌,最简单的方法是使用流:

int count = 225;
int[] value = new Random()
        .ints(1, count + 1)
        .distinct()
        .limit(count)
        .toArray();

您可以使用布尔数组,通过使用生成的数字作为索引来检查添加了哪些值,这将为您提供恒定的查找速度。您只需循环数组一次。只需使用生成的随机数作为布尔数组的索引,如果该数字的索引为false,则我们找到了一个新数字。如果生成的数字不包含true,然后我们继续生成另一个随机数,直到找到该数字的false值

int size = 225;
int [] value = new int[size];
boolean [] valuesCreated = new boolean[size + 1];

int randnum;
Random num = new Random();

for (int x = 0; x < value.length; x++) // Fills array with Random Numbers from 0 to 225
{
    do{
        randnum = (num.nextInt(value.length)) + 1;
    }while(valuesCreated[randnum] == true);

    value[x] = randnum;
    valuesCreated[randnum] = true;
}
int size=225;
int[]值=新的int[大小];
boolean[]valuesCreated=新布尔值[size+1];
int-randnum;
随机数=新随机数();
for(int x=0;x

请注意,这会将值随机放入数组中,但是此方法按顺序生成值的可能性最小,但数组越大,生成值的可能性就越小。

您可以添加
标志并检查它
没有使用HashMap、Hashset或ArrayList的情况下也会出现类似的情况

boolean isThere = false;
for (int x = 0; x < value.length; x++) // Fills array with Random Numbers from 0 to 225
{
    randnum = (num.nextInt(225)) + 1;
    for(int i =0;i<value.length;i++){
      if(value[i] == randnum){
        isThere = true;
      }
    }
    if(!isThere){
      value[x] = randnum;
      isThere = false;
    }        
}
boolean isThere=false;
for(int x=0;x
int [] value = new int[225]; 
int randnum;
Random num = new Random();

for (int x = 0; x < value.length; x++) 
{
    value[x] = x+1;
}

for (int x = 0; x < value.length - 1; x++)
{
    int r = num.nextInt(225 - x) + x;
    int tmp = value[x];
    value[x] = value[r];
    value[r] = tmp;
}
int[]值=新的int[225];
int-randnum;
随机数=新随机数();
对于(int x=0;x