Java - Få tilfeldig element / element fra en liste

1. Introduksjon

Velger et tilfeldig Liste element er en veldig grunnleggende operasjon, men ikke så åpenbar å implementere. I denne artikkelen viser vi den mest effektive måten å gjøre dette på i forskjellige sammenhenger.

2. Plukke en tilfeldig vare / gjenstander

For å få et tilfeldig element fra en Liste for eksempel må du generere et tilfeldig indeksnummer og deretter hente et element ved hjelp av dette genererte indeksnummeret List.get () metode.

Hovedpoenget her er å huske at du ikke må bruke en indeks som overstiger din Liste er størrelse.

2.1. Enkelt tilfeldig element

For å velge en tilfeldig indeks, kan du bruke Random.nextInt (int bound) metode:

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

I stedet for Tilfeldig klasse, kan du alltid bruke statisk metode Math.random () og multipliser den med listestørrelse (Math.random () genererer Dobbelt tilfeldig verdi mellom 0 (inkludert) og 1 (eksklusiv), så husk å kaste den til int etter multiplikasjon).

2.2. Velg Tilfeldig indeks i flertrådet miljø

Når du skriver flertrådsprogrammer ved bruk av singelen Tilfeldig klasseinstans, kan føre til at du velger samme verdi for hver prosess som får tilgang til denne forekomsten. Vi kan alltid opprette en ny forekomst per tråd ved å bruke en dedikert ThreadLocalRandom klasse:

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

2.3. Velg Tilfeldige gjenstander med repetisjoner

Noen ganger vil du kanskje velge noen få elementer fra en liste. Det er ganske greit:

public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat () {Random rand = new Random (); List givenList = Arrays.asList ("en", "to", "tre", "fire"); int numberOfElements = 2; for (int i = 0; i <numberOfElements; i ++) {int randomIndex = rand.nextInt (givenList.size ()); Streng randomElement = givenList.get (randomIndex); }}

2.4. Velg Tilfeldige gjenstander uten repetisjoner

Her må du sørge for at elementet blir fjernet fra listen etter valg:

public void givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat () {Random rand = new Random (); List givenList = Lists.newArrayList ("en", "to", "tre", "fire"); int numberOfElements = 2; for (int i = 0; i <numberOfElements; i ++) {int randomIndex = rand.nextInt (givenList.size ()); Streng randomElement = givenList.get (randomIndex); givenList.remove (randomIndex); }}

2.5. Velg Tilfeldig serie

I tilfelle du ønsker å skaffe tilfeldige serier med elementer, Samlinger utils-klasse kan være nyttig:

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

3. Konklusjon

I denne artikkelen undersøkte vi den mest effektive måten å hente tilfeldige elementer fra a Liste instance for forskjellige scenarier.

Kodeeksempler finnes på GitHub.


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