Java - Haal een willekeurig item / element uit een lijst

1. Inleiding

Willekeurig kiezen Lijst element is een heel basale handeling, maar niet zo voor de hand liggend om te implementeren. In dit artikel laten we zien wat de meest efficiënte manier is om dit in verschillende contexten te doen.

2. Een willekeurig item / items kiezen

Om een ​​willekeurig item uit een Lijst U moet bijvoorbeeld een willekeurig indexnummer genereren en vervolgens een item ophalen aan de hand van dit gegenereerde indexnummer met Lijst.get () methode.

Het belangrijkste punt hier is om te onthouden dat u geen index mag gebruiken die groter is dan uw Lijst grootte.

2.1. Eén willekeurig item

Om een ​​willekeurige index te selecteren, kunt u Random.nextInt (int gebonden) methode:

openbare ongeldige gegevenList_shouldReturnARandomElement () {Lijst gegevenList = Arrays.asList (1, 2, 3); Random rand = nieuwe Random (); int randomElement = gegevenList.get (rand.nextInt (gegevenList.size ())); }

In plaats van Willekeurig class, kunt u altijd de statische methode gebruiken Math.random () en vermenigvuldig het met de lijstgrootte (Math.random () genereert Dubbele willekeurige waarde tussen 0 (inclusief) en 1 (exclusief), dus vergeet niet om deze naar te casten int na vermenigvuldiging).

2.2. Selecteer Willekeurige index in Multithread-omgeving

Bij het schrijven van multithread-applicaties met de single Willekeurig class-instantie, kan resulteren in het kiezen van dezelfde waarde voor elk proces dat toegang heeft tot deze instantie. We kunnen altijd een nieuwe instantie per thread maken door een speciale ThreadLocalRandom klasse:

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

2.3. Selecteer willekeurige items met herhalingen

Soms wilt u misschien een paar elementen uit een lijst kiezen. Het is vrij eenvoudig:

openbare ongeldige gegevenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat () {Willekeurige rand = nieuwe Willekeurige (); List gaveList = Arrays.asList ("een", "twee", "drie", "vier"); int numberOfElements = 2; voor (int i = 0; i <numberOfElements; i ++) {int randomIndex = rand.nextInt (givenList.size ()); String randomElement = givenList.get (randomIndex); }}

2.4. Selecteer willekeurige items zonder herhalingen

Hier moet u ervoor zorgen dat het element na selectie uit de lijst wordt verwijderd:

openbare ongeldige gegevenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat () {Willekeurige rand = nieuwe Willekeurige (); List gaveList = Lists.newArrayList ("een", "twee", "drie", "vier"); int numberOfElements = 2; voor (int i = 0; i <numberOfElements; i ++) {int randomIndex = rand.nextInt (givenList.size ()); String randomElement = givenList.get (randomIndex); gegevenList.remove (randomIndex); }}

2.5. Selecteer Random Series

Als u een willekeurige reeks elementen wilt verkrijgen, Collecties utils class kan handig zijn:

openbare ongeldige gegevenList_whenSeriesLengthChosen_shouldReturnRandomSeries () {Lijst gegevenList = Lists.newArrayList (1, 2, 3, 4, 5, 6); Collections.shuffle (givenList); int randomSeriesLength = 3; Lijst randomSeries = givenList.subList (0, randomSeriesLength); }

3. Conclusie

In dit artikel hebben we de meest efficiënte manier onderzocht om willekeurige elementen uit een Lijst instance voor verschillende scenario's.

Codevoorbeelden zijn te vinden op GitHub.


$config[zx-auto] not found$config[zx-overlay] not found