重複しない乱数配列(Java版/ArrayList使用版)を見て、「Collection使うなら、もうちょっと楽になるよな」と思ったので改善を検討。
Ideoneで試行錯誤したので、クラス名などがちょっと違います。
Ideone.java
import java.util.HashSet;
import java.util.ArrayList;
import java.util.Random;
class MakeRandomArray {
public ArrayList<Integer> makeRandomArray(ArrayList<Integer> array, Random rand, int arraySize, int randMax, int randMin){
HashSet<Integer> set = new HashSet<>(arraySize);
for(int i = 1; i <= arraySize; i++){
set.add(random(rand, randMax, randMin));
}
while(set.size() != arraySize){
set.add(random(rand, randMax, randMin));
}
array.addAll(set);
return array;
}
private int random(Random rand, int max,int min){
if(max < min) return rand.nextInt(min - max) + max;
else return rand.nextInt(max - min) + min;
}
}
class Ideone{
public static void main(String[] args){
MakeRandomArray mkRandArr = new MakeRandomArray();
ArrayList<Integer> arr = mkRandArr.makeRandomArray(new ArrayList<Integer>(), new Random(), 10, 100, 1);
for(int x = 0; x <= 9; x++) System.out.println(arr.get(x));
}
}
さらにJava8でのラムダを使うなどして処理を整理すると。
Ideone.java
import java.util.*;
import java.util.stream.*;
import java.lang.Math;
class MakeRandomArray {
public List<Integer> makeRandomArray(Random rand, int arraySize, int randMax, int randMin){
List<Integer> array = rand.ints(Math.min(randMin,randMax),Math.max(randMin,randMax))
.distinct()
.limit(arraySize)
.boxed()
.collect(Collectors.toList());
return array;
}
}
class Ideone{
public static void main(String[] args){
MakeRandomArray mkRandArr = new MakeRandomArray();
List<Integer> arr = mkRandArr.makeRandomArray(new Random(), 10, 100, 1);
for(int x = 0; x <= 9; x++) System.out.println(arr.get(x));
}
}