網頁

2019/5/15

Java 從陣列隨機取得不重複的索引值

例如有個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;
}

參考:

沒有留言:

張貼留言