例如有個List
大小為10,從中取得兩個不重複的索引值作法如下。
使用Set
來裝載不重複的值。
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1,2,3,4,5,7,8,9,10);
System.out.println(getNonRepetitiveRandomIndexes(2, list));
}
/**
* 從陣列隨機取得指定數量不重複的索引值
* @param <T> 陣列的元素型態
* @param num 要取得的索引值數量
* @param list 要取得索引值的來源List陣列
* @return 不重複索引值集合
*/
public static <T> Set<Integer> getNonRepetitiveRandomIndexes(int num, List<T> list) {
if (list == null || list.size() < num) {
return null;
}
Set<Integer> randomIndexes = new HashSet<>(num);
while (randomIndexes.size() < num) {
int random = new Random().nextInt(list.size());
randomIndexes.add(random);
}
return randomIndexes;
}
Java 8可改成以下
public static <T> Set<Integer> getNonRepetitiveRandomIndexes(int num, List<T> list) {
if (list == null || list.size() < num) {
return null;
}
Set<Integer> randomIndexes = new HashSet<>(num);
while (randomIndexes.size() < num) {
int random = new Random().ints(0, list.size() + 1).findFirst().getAsInt();
randomIndexes.add(random);
}
return randomIndexes;
}
參考:
沒有留言:
張貼留言