Java –從列表中獲取隨機項目/元素
1.簡介
選擇一個隨機的List
元素是一個非常基本的操作,但實現起來並不那麼明顯。在本文中,我們將展示在不同情況下執行此操作的最有效方法。
2.挑選一個或多個隨機物品
為了從List
實例中獲取隨機項目,您需要生成一個隨機索引號,然後使用List.get()
方法通過此生成的索引號來獲取項目。
這裡的重點是要記住,您所使用的索引不得超過List's
大小。
2.1。單個隨機物品
為了選擇一個隨機索引,可以使用Random.nextInt(int bound)
方法:
public void givenList_shouldReturnARandomElement() {
List<Integer> givenList = Arrays.asList(1, 2, 3);
Random rand = new Random();
int randomElement = givenList.get(rand.nextInt(givenList.size()));
}
您可以始終使用靜態方法Math.random()
而不是Random
類,並將其與列表大小相乘( Math.random()
生成介於0(含)和1( Math.random()
之間的Double
隨機值,因此請記住將其int
為int
乘法後)。
2.2。在多線程環境中選擇隨機索引
使用單個Random
類實例編寫多線程應用程序時,可能會導致為訪問該實例的每個進程選擇相同的值。我們始終可以使用專用的ThreadLocalRandom
類為每個線程創建一個新實例:
int randomElementIndex
= ThreadLocalRandom.current().nextInt(listSize) % givenList.size();
2.3。選擇重複的隨機項目
有時,您可能希望從列表中選擇一些元素。這很簡單:
public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat() {
Random rand = new Random();
List<String> givenList = Arrays.asList("one", "two", "three", "four");
int numberOfElements = 2;
for (int i = 0; i < numberOfElements; i++) {
int randomIndex = rand.nextInt(givenList.size());
String randomElement = givenList.get(randomIndex);
}
}
2.4。選擇無重複的隨機項目
在這裡,您需要確保選擇後將元素從列表中刪除:
public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat() {
Random rand = new Random();
List<String> givenList = Lists.newArrayList("one", "two", "three", "four");
int numberOfElements = 2;
for (int i = 0; i < numberOfElements; i++) {
int randomIndex = rand.nextInt(givenList.size());
String randomElement = givenList.get(randomIndex);
givenList.remove(randomIndex);
}
}
2.5。選擇隨機系列
如果您想獲取一系列隨機元素, Collections
utils類可能很方便:
public void givenList_whenSeriesLengthChosen_shouldReturnRandomSeries() {
List<Integer> givenList = Lists.newArrayList(1, 2, 3, 4, 5, 6);
Collections.shuffle(givenList);
int randomSeriesLength = 3;
List<Integer> randomSeries = givenList.subList(0, randomSeriesLength);
}
3.結論
在這篇文章中,我們探索取出由隨機因素的最有效的方式List
instanc e
於不同的場合.
可以在GitHub上找到代碼示例。
0 條評論,你可以發表評論,我們會進行改進
