Zamiešané zbierky v Jave

1. Prehľad

V tomto rýchlom článku uvidíme ako môžeme zamiešať zbierku v Jave. Java má zabudovanú metódu miešania Zoznam predmety - využijeme ho aj pre ďalšie zbierky.

2. Premiešanie zoznamu

Použijeme metódu java.util.Collections.shuffle , ktorá berie ako vstup a Zoznam a zamieša ho na miesto. In-place, to znamená, že zamieša rovnaký zoznam, ako sa odovzdáva na vstupe, namiesto toho, aby vytvoril nový s miešanými prvkami.

Pozrime sa na rýchly príklad, ktorý ukazuje, ako zamiešať a Zoznam:

Zoznam študentov = Arrays.asList ("Foo", "Bar", "Baz", "Qux"); Zbierky.shuffle (študenti);

Existuje druhá verzia aplikácie java.util.Collections.shuffle ktorý tiež prijíma ako vstup vlastný zdroj náhodnosti. To sa dá použiť na to, aby sa z miešania stal deterministický proces, ak máme pre našu aplikáciu takúto požiadavku.

Použime tento druhý variant na dosiahnutie rovnakého premiešania na dvoch zoznamoch:

Zoznam študentov_1 = Arrays.asList ("Foo", "Bar", "Baz", "Qux"); Zoznam študentov_2 = Arrays.asList ("Foo", "Bar", "Baz", "Qux"); int seedValue = 10; Collections.shuffle (students_1, new Random (seedValue)); Collections.shuffle (students_2, new Random (seedValue)); assertThat (students_1) .isEqualTo (students_2);

Pri použití rovnakých zdrojov náhodnosti (inicializovaných z rovnakej počiatočnej hodnoty) bude vygenerovaná sekvencia náhodných čísel rovnaká pre obidve miešania. Po zamiešaní budú teda oba zoznamy obsahovať prvky v úplne rovnakom poradí.

3. Miešanie prvkov neusporiadaných zbierok

Možno budeme chcieť zamiešať ďalšie zbierky, ako napr Nastaviť, Mapa, alebo Frontanapríklad, ale všetky tieto zbierky sú neusporiadané - neudržiavajú nijaké konkrétne poradie.

Niektoré implementácie, ako napr LinkedHashMap, alebo a Nastaviť s Komparátor - udržiavajte pevné poradie, takže ich tiež nemôžeme zamiešať.

Avšak stále môžeme náhodne pristupovať k ich prvkom tak, že ich najskôr prevedieme na a Zoznam, potom toto zamiešajte Zoznam.

Pozrime sa na rýchly príklad premiešania prvkov a Mapa:

Map studentsById = new HashMap (); studentsById.put (1, "Foo"); studentsById.put (2, "Bar"); studentsById.put (3, "Baz"); studentsById.put (4, "Qux"); Zoznam shuffledStudentEntries = new ArrayList (studentsById.entrySet ()); Zbierky.shuffle (shuffledStudentEntries); Zoznam shuffledStudents = shuffledStudentEntries.stream () .map (Map.Entry :: getValue) .collect (Collectors.toList ());

Podobne môžeme zamiešať prvky a Nastaviť:

Set students = new HashSet (Arrays.asList ("Foo", "Bar", "Baz", "Qux")); List studentList = new ArrayList (students); Collections.shuffle (studentList);

4. Záver

V tomto rýchlom návode sme videli, ako sa používa java.util.Collections.shuffle zamiešať rôzne zbierky v Jave.

Toto prirodzene funguje priamo s a Zoznam, a môžeme ho použiť nepriamo na randomizáciu poradia prvkov aj v ďalších zbierkach. Proces miešania môžeme tiež riadiť poskytnutím vlastného zdroja náhodnosti a urobiť ho deterministickým.

Ako obvykle je všetok kód uvedený v tomto článku k dispozícii na GitHub.


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