Tömbök rendezése Java-ban

1. Áttekintés

Ebben az oktatóanyagban megvitatjuk a tömbök növekvő és csökkenő sorrendbe rendezésének általános módszereit.

Megnézzük a Java használatát Tömbök osztályos rendezési módszer, valamint a sajátunk megvalósítása Összehasonlító tömbjeink értékeinek rendezéséhez.

2. Objektumdefiníciók

Mielőtt elkezdenénk, határozzunk meg gyorsan néhány tömböt, amelyeket az oktatóanyagban rendezünk. Először létrehozunk egy tömböt ints és egy sor húr:

int [] számok = új int [] {-8, 7, 5, 9, 10, -2, 3}; Karakterlánc [] karakterlánc = új karakterlánc [] {"tanulás", "java", "együtt", "baeldung"};

Hozzunk létre egy tömböt is Munkavállaló tárgyak, ahol minden alkalmazottnak van egy id és a név tulajdonság:

John = új alkalmazott (6, "John"); Alkalmazott mary = új alkalmazott (3, "Mary"); Employee david = új alkalmazott (4, "David"); Alkalmazott [] alkalmazottak = új Alkalmazott [] {john, mary, david};

3. Rendezés növekvő sorrendben

Java util.Arrays.sort módszer gyors és egyszerű módot kínál a primitívek vagy objektumok tömbjének rendezésére, amelyek megvalósítják a Hasonló interfész növekvő sorrendben.

A primitívek válogatásakor a Tömbök.rendezés metódus a Quicksort Dual-Pivot megvalósítását használja. Az objektumok rendezése során azonban a MergeSort iteratív megvalósítását alkalmazzák.

3.1. Primitívek

Ahhoz, hogy egy primitív tömböt növekvő sorrendbe rendezzünk, átadjuk a tömböt a fajta módszer:

Tömbök.rendezés (számok); assertArrayEquals (új int [] {-8, -2, 3, 5, 7, 9, 10}, számok); 

3.2. Összehasonlítható megvalósítású objektumok

Az objektumokat, amelyek megvalósítják a Hasonló felület, csakúgy, mint a primitív tömbünknél, egyszerűen átadhatjuk a tömböt a fajta módszer:

Tömbök.rendezés (húrok); assertArrayEquals (új karakterlánc [] {"baeldung", "java", "tanulás", "with"} karakterlánccal);

3.3. Objektumok, amelyek nem valósíthatók meg összehasonlítható módon

Olyan objektumok rendezése, amelyek nem valósítják meg a Hasonló Interfész, mint a tömbünk Alkalmazottak, megköveteli, hogy adjuk meg a saját összehasonlítót.

Ezt a Java 8-ban nagyon egyszerűen megtehetjük, megadva azt a tulajdonságot, amelyet összehasonlítani szeretnénk Munkavállaló tárgyak a bennünk Összehasonlító:

Arrays.sort (alkalmazottak, Comparator.comparing (Employee :: getName)); assertArrayEquals (új alkalmazott [] {david, john, mary}, alkalmazottak);

Ebben az esetben meghatároztuk, hogy alkalmazottainkat szeretnénk megrendelni név attribútumokat.

Objektumainkat egynél több attribútumra is rendezhetjük azáltal, hogy összehasonlításunkat felhasználjuk Összehasonlító összehasonlítása módszer:

Tömbök.sort (alkalmazottak, Comparator.comparing (Employee :: getName) .theComparing (Employee :: getId));

4. Rendezés csökkenő sorrendben

4.1. Primitívek

A primitív tömb csökkenő sorrendbe rendezése nem olyan egyszerű, mint a növekvő sorrend, mivel a Java nem támogatja a Összehasonlítók primitív típusokon. Ennek a hiánynak a leküzdésére van néhány lehetőségünk.

Először is tehetnénk rendezze tömbünket növekvő sorrendben, majd végezzen helybeni megfordítást a tömb.

Másodszor, konvertálhatnánk tömbünket listává, használja a Guava-okat Lists.reverse () módszer majd konvertálja vissza listánkat tömbgé.

Végül átalakíthatjuk tömbünket a-ra Folyam majd térképezze vissza egy int sor. Szép előnye, hogy létezik egysoros és csak az alap Java-t használja:

számok = IntStream.of (számok) .boxed (). rendezve (Comparator.reverseOrder ()). mapToInt (i -> i) .toArray (); assertArrayEquals (új int [] {10, 9, 7, 5, 3, -2, -8}, számok);

Ennek az az oka, hogy ez működik dobozos mindegyiket megfordítja int egy an Egész szám, melyik csinál megvalósítani Összehasonlító.

4.2. Összehasonlítható megvalósítású objektumok

A. Megvalósító objektumtömb rendezése Hasonló felület csökkenő sorrendben meglehetősen egyszerű. Csak annyit kell tennünk, hogy átmegyünk egy Összehasonlító mint második paraméterünk fajta módszer.

A Java 8-ban használhatjuk Comparator.reverseOrder () jelezni, hogy szeretnénk, ha tömbünket csökkenő sorrendbe rendeznénk:

Tömbök.sort (karakterláncok, Comparator.reverseOrder ()); assertArrayEquals (új String [] {"with", "learning", "java", "baeldung"}, húrok);

4.3. Objektumok, amelyek nem valósíthatók meg összehasonlítható módon

Az összehasonlítható megvalósítású objektumok rendezéséhez hasonlóan megfordíthatjuk szokásunk sorrendjét Összehasonlító hozzáadásával fordított () összehasonlítási definíciónk végén:

Tömbök.sort (alkalmazottak, Comparator.comparing (Employee :: getName) .reversed ()); assertArrayEquals (új alkalmazott [] {mary, john, david}, alkalmazottak);

5. Következtetés

Ebben a cikkben megvitattuk, hogyan rendezhetjük a primitívek és az objektumok tömbjeit növekvő és csökkenő sorrendben a Tömbök.rendezés módszer.

Szokás szerint a cikk forráskódja megtalálható a Github oldalon.


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