Java - Вземете произволен елемент / елемент от списък

1. Въведение

Избирането на произволен елемент Списък е много основна операция, но не толкова очевидна за изпълнение. В тази статия ще покажем най-ефективния начин за това в различен контекст.

2. Избиране на произволен артикул / артикули

За да получите произволен елемент от екземпляр на Списък , трябва да генерирате произволен индексен номер и след това да извлечете елемент от този генериран индексен номер, използвайки метода List.get () .

Ключовият момент тук е да запомните, че не трябва да използвате индекс, който надвишава размера на вашия списък .

2.1. Единичен случаен артикул

За да изберете произволен индекс, можете да използвате метода Random.nextInt (int bound) :

public void givenList_shouldReturnARandomElement() { List givenList = Arrays.asList(1, 2, 3); Random rand = new Random(); int randomElement = givenList.get(rand.nextInt(givenList.size())); }

Вместо Random клас, винаги можете да използвате статичен метод Math.random () и умножете го с размер списък ( Math.random () генерира двойно случайна стойност между 0 (включително) и 1 (не се брои), така че не забравяйте да се хвърли на вътр след умножение).

2.2. Изберете Random Index в Multithread Environment

Когато пишете многонишкови приложения, използвайки единичния екземпляр на случаен клас, може да доведе до избор на една и съща стойност за всеки процес, осъществяващ достъп до този екземпляр. Винаги можем да създадем нов екземпляр за нишка, като използваме специален клас ThreadLocalRandom :

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

2.3. Изберете произволни елементи с повторения

Понякога може да искате да изберете няколко елемента от списък. Това е съвсем просто:

public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat() { Random rand = new Random(); List 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 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. Изберете Random Series

В случай, че искате да получите произволни поредици от елементи, може да ви бъде полезен класът Collections utils:

public void givenList_whenSeriesLengthChosen_shouldReturnRandomSeries() { List givenList = Lists.newArrayList(1, 2, 3, 4, 5, 6); Collections.shuffle(givenList); int randomSeriesLength = 3; List randomSeries = givenList.subList(0, randomSeriesLength); }

3. Заключение

В тази статия, ние проучени най-ефективния начин за извличане на случайни елементи от Списък instanc д за различни сценарии .

Примери за кодове могат да бъдат намерени на GitHub.