Java從List中獲取隨機元素

weixin_34127717發表於2018-09-17

在List中選取一個隨機的元素是比較常見的應用場景,但是實現起來相對麻煩一點,這裡我們列舉一些再不同場景下高效實現隨機選取元素的方式。

操作

首先要生成一個隨機的下標數,然後通過List.get()方法獲取對應下標的元素。
注意點:下標不能超過List的容量

單個隨機元素

  1. 使用Random.nextInt(int)方法
public void solution(){
    List<Integer> givenList = Arrays.asList(1, 2, 3);
    Random rand = new Random();
    int randomElement = givenList.get(rand.nextInt(givenList.size()));
}
  1. 使用Math.random()靜態方法,然後乘以列表的大小,最後轉成int型別的。
public void solution(){
    List<Integer> givenList = Arrays.asList(1, 2, 3);
    int randomElement = givenList.get((int) (Math.random() * givenList.size()));
}

多執行緒環境

當在多執行緒環境下使用Randome例項的時候,可能導致多個執行緒獲取到相同值的情況,這時我們可以使用ThreadLocalRandom

int randomElementIndex
  = ThreadLocalRandom.current().nextInt(listSize) % givenList.size();

選取隨機的多個集合元素

有時候,你想獲得隨機的子列元素,可以使用Collections工具類

public void solution(){
    List<Integer> givenList = Arrays.asList(1, 2, 3,4,5,6);
    Collections.shuffle(givenList);
 
    int randomSeriesLength = 3;
 
    List<Integer> randomSeries = givenList.subList(0, randomSeriesLength);
}

最後

這篇文章,我們探討了不同的從列表中獲取隨機元素的方法,在不同的場景下使用不同的方案,希望對大家有幫助

參考

相關文章