Java –从列表中获取随机项目/元素
评论 0
浏览 0
2016-10-05
1.绪论
随机抽取一个List元素是一个非常基本的操作,但实现起来却不是那么明显。在这篇文章中,我们将展示在不同情况下最有效的操作方法。
2.随机挑选一个/多个项目
为了从List实例中获取一个随机项目,你需要生成一个随机的索引号,然后用List.get()方法通过这个生成的索引号来获取一个项目。
这里的关键点是要记住,你不能使用一个超过你的List大小的索引。
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()并与列表大小相乘(Math.random()生成Double介于0(包容)和1(排他)之间的随机值,所以记得在乘法后将其铸为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实例e中获取随机元素的最有效的方法,适用于不同的场景.。
代码实例可以在GitHub上找到。
0 个评论