Java - Dohvatite nasumične stavke / elemente s popisa

1. Uvod

Biranje slučajnog Popis element je vrlo osnovna operacija, ali nije toliko očita za provedbu. U ovom ćemo članku pokazati najučinkovitiji način za to u različitim kontekstima.

2. Odabir slučajnih predmeta / predmeta

Da biste dobili slučajni predmet iz a Popis Na primjer, trebate generirati slučajni indeksni broj, a zatim pomoću ovog generiranog indeksnog broja dohvatiti stavku List.get () metoda.

Ključno je ovdje zapamtiti da ne smijete koristiti indeks koji premašuje vaš Popis veličina.

2.1. Jedna slučajna stavka

Možete odabrati slučajni indeks Random.nextInt (int bound) metoda:

javna praznina givenList_shouldReturnARandomElement () {Popis givenList = Arrays.asList (1, 2, 3); Random rand = novi Random (); int randomElement = givenList.get (rand.nextInt (givenList.size ())); }

Umjesto Slučajno klase, uvijek možete koristiti statičku metodu Math.random () i pomnožite ga s veličinom popisa (Math.random () generira Dvostruko slučajna vrijednost između 0 (uključivo) i 1 (ekskluzivno), zato je ne zaboravite baciti int nakon množenja).

2.2. Odaberite Slučajni indeks u višenitnom okruženju

Prilikom pisanja višenitnih aplikacija pomoću jednog Slučajno instance instance, može rezultirati odabirom iste vrijednosti za svaki proces koji pristupa ovoj instanci. Uvijek možemo stvoriti novu instancu po niti pomoću namjenske ThreadLocalRandom razred:

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

2.3. Odaberite slučajne stavke s ponavljanjem

Ponekad biste mogli odabrati nekoliko elemenata s popisa. Sasvim je izravno:

javna praznina givenList_whenNumberElementsChosen_shouldReturnRandomElementsRepeat () {Random rand = new Random (); Popis givenList = Arrays.asList ("jedan", "dva", "tri", "četiri"); int numberOfElements = 2; for (int i = 0; i <numberOfElements; i ++) {int randomIndex = rand.nextInt (givenList.size ()); Niz randomElement = givenList.get (randomIndex); }}

2.4. Odaberite nasumične stavke bez ponavljanja

Ovdje morate biti sigurni da je element uklonjen s popisa nakon odabira:

javna praznina givenList_whenNumberElementsChosen_shouldReturnRandomElementsNoRepeat () {Random rand = new Random (); Popis givenList = Lists.newArrayList ("jedan", "dva", "tri", "četiri"); int numberOfElements = 2; for (int i = 0; i <numberOfElements; i ++) {int randomIndex = rand.nextInt (givenList.size ()); Niz randomElement = givenList.get (randomIndex); givenList.remove (randomIndex); }}

2.5. Odaberite Slučajne serije

U slučaju da želite dobiti slučajni niz elemenata, Zbirke klasa utils može biti korisna:

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

3. Zaključak

U ovom smo članku istražili najučinkovitiji način dohvaćanja slučajnih elemenata iz a Popis instance za različite scenarije.

Primjeri koda mogu se naći na GitHubu.