Gyűjtemények keverése Java-ban

1. Áttekintés

Ebben a gyors cikkben meglátjuk hogyan keverhetjük össze a Java-gyűjteményeket. A Java beépített módszerrel keveri Lista tárgyak - felhasználjuk más gyűjteményekhez is.

2. Lista keverése

Használjuk a módszert java.util.Collections.shuffle , amely bemenetként veszi fel a Lista és összekeveri a helyén. Helyben azt értjük, hogy ugyanaz a lista keveredik, mint amit a bemenet adott, ahelyett, hogy újat hozna létre összekevert elemekkel.

Nézzünk meg egy gyors példát, amely bemutatja, hogyan keverhetjük a Lista:

A tanulók listája = Arrays.asList ("Foo", "Bár", "Baz", "Qux"); Gyűjtemények.csere (hallgatók);

Van egy második verziója java.util.Collections.shuffle amely szintén bevezeti a véletlenszerűség egyéni forrását. Ezzel fel lehet használni a keverést egy determinisztikus folyamatra, ha ilyen követelményünk van az alkalmazásunkra.

Használjuk ezt a második változatot, hogy ugyanazon keverést érjük el két listán:

Sorolja fel a tanulókat_1 = Arrays.asList ("Foo", "Bár", "Baz", "Qux"); Sorolja fel a diákokat_2 = Arrays.asList ("Foo", "Bar", "Baz", "Qux"); int seedValue = 10; Collections.shuffle (hallgatók_1, új Random (seedValue)); Collections.shuffle (hallgatók_2, új Random (seedValue)); assertThat (hallgatók_1) .isEqualTo (hallgatók_2);

Ha azonos véletlenszerűség-forrásokat használunk (ugyanabból az alapértékből inicializálva), akkor a létrehozott véletlenszám-szekvencia mindkét keverésnél megegyezik. Így a keverés után mindkét lista pontosan ugyanabban a sorrendben fogja tartalmazni az elemeket.

3. Rendezetlen gyűjtemények elemeinek keverése

Előfordulhat, hogy más gyűjteményeket is keverni szeretnénk, mint pl Készlet, Térkép, vagy Sorpéldául, de ezek a gyűjtemények rendezetlenek - nem tartanak fenn külön rendet.

Néhány megvalósítás, például LinkedHashMap, vagy a Készlet val,-vel Összehasonlító - tartsanak fenn fix sorrendet, így ezeket sem keverhetjük meg.

Azonban, továbbra is véletlenszerűen férhetünk hozzá elemeikhez, ha először a-vá alakítjuk át őket Lista, majd ezt keveri Lista.

Lássunk egy gyors példát a Térkép:

Map studentsById = new HashMap (); studentsById.put (1, "Foo"); studentsById.put (2, "Bár"); studentsById.put (3, "Baz"); studentsById.put (4, "Qux"); Lista shuffledStudentEntries = new ArrayList (studentsById.entrySet ()); Collections.shuffle (shuffledStudentEntries); List shuffledStudents = shuffledStudentEntries.stream () .map (Map.Entry :: getValue) .collect (Collectors.toList ());

Hasonlóképpen megkeverhetjük a Készlet:

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

4. Következtetés

Ebben a gyors bemutatóban láttuk, hogyan kell használni java.util.Collections.shuffle hogy különböző Java-gyűjteményeket keverjen.

Ez természetesen közvetlenül működik a Lista, és közvetetten felhasználhatjuk az elemek sorrendjének randomizálására más gyűjteményekben is. A véletlenszerűség egyéni forrásának biztosításával vezérelhetjük a keverési folyamatot, és determinisztikussá tehetjük azt.

Szokás szerint a cikkben bemutatott összes kód elérhető a GitHubon.


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