Triedenie polí v Jave

1. Prehľad

V tomto výučbe sa budeme zaoberať bežnými metódami triedenia polí vo vzostupnom a zostupnom poradí.

Pozrime sa na používanie Javy Polia triedenie, ako aj implementáciu našej vlastnej Komparátor zoradiť hodnoty našich polí.

2. Definície objektov

Skôr ako začneme, poďme rýchlo definovať niekoľko polí, ktoré budeme triediť v rámci tohto tutoriálu. Najskôr vytvoríme pole ints a pole reťazcov:

int [] numbers = new int [] {-8, 7, 5, 9, 10, -2, 3}; String [] strings = new String [] {"learning", "java", "with", "baeldung"};

A vytvorme tiež pole Zamestnanec predmety, kde má každý zamestnanec id a a názov atribút:

Zamestnanec john = nový zamestnanec (6, „John“); Zamestnanec mary = nový zamestnanec (3, „Mary“); Zamestnanec david = nový zamestnanec (4, „David“); Zamestnanec [] zamestnanci = nový Zamestnanec [] {john, mary, david};

3. Zoradenie vzostupne

Java util.Arrays.sort metóda nám poskytuje rýchly a jednoduchý spôsob triedenia množstva primitívov alebo objektov, ktoré implementujú Porovnateľné rozhranie vzostupne.

Pri triedení primitívov sa Polia. Zoradiť metóda využíva Dual-Pivot implementáciu Quicksort. Pri triedení objektov sa však používa iteratívna implementácia MergeSort.

3.1. Primitív

Aby sme primitívne pole zoradili vzostupne, odovzdáme svoje pole znaku triediť metóda:

Polia. Zoradiť (čísla); assertArrayEquals (new int [] {-8, -2, 3, 5, 7, 9, 10}, čísla); 

3.2. Objekty, ktoré sa realizujú porovnateľne

Pre objekty, ktoré implementujú Porovnateľné rozhranie, rovnako ako v prípade nášho primitívneho poľa, môžeme tiež naše pole jednoducho odovzdať triediť metóda:

Array.sort (reťazce); assertArrayEquals (nový reťazec [] {"baeldung", "java", "učenie", "s"}, reťazce);

3.3. Objekty, ktoré sa neimplementujú, sú porovnateľné

Triedenie objektov, ktoré neimplementujú Porovnateľné Rozhranie, ako je naše pole Zamestnanci, vyžaduje, aby sme určili náš vlastný komparátor.

V Jave 8 to môžeme urobiť veľmi ľahko zadaním vlastnosti, ktorú by sme chceli porovnať Zamestnanec predmety v našom Komparátor:

Arrays.sort (zamestnanci, Comparator.comparing (zamestnanec :: getName)); assertArrayEquals (nový zamestnanec [] {david, john, mary}, zamestnanci);

V tomto prípade sme špecifikovali, že by sme chceli objednať našich zamestnancov podľa ich názov atribúty.

Naše objekty môžeme tiež zoradiť podľa viacerých atribútov tak, že použijeme reťaze našich porovnaní Porovnávač potom porovnáva metóda:

Arrays.sort (zamestnanci, Comparator.comparing (Employee :: getName) .thComComing (Employee :: getId));

4. Zoradenie zostupne

4.1. Primitív

Zoradenie primitívneho poľa v zostupnom poradí nie je také jednoduché ako jeho zoradenie vo vzostupnom poradí, pretože Java nepodporuje použitie Komparátory na primitívnych typoch. Na prekonanie tohto nedostatku máme niekoľko možností.

Najprv sme mohli zoraďte naše pole vzostupne a potom urobte obrat na mieste poľa.

Po druhé, mohli by sme previesť naše pole na zoznam, použite Guava Lists.reverse () metóda a potom náš zoznam previesť späť do poľa.

Nakoniec by sme mohli transformovať naše pole na a Prúd a potom ho namapujte späť na int pole. Má to peknú výhodu v tom, že som jednorázová linka a len pomocou základnej Javy:

čísla = IntStream.of (čísla) .boxed (). zoradené (Comparator.reverseOrder ()). mapToInt (i -> i) .toArray (); assertArrayEquals (new int [] {10, 9, 7, 5, 3, -2, -8}, čísla);

Dôvod, prečo to funguje, je ten škatuľkovaný otočí každý int do Celé číslo, ktoré robí realizovať Komparátor.

4.2. Objekty, ktoré sa realizujú porovnateľne

Triedenie poľa objektov, ktoré implementuje Porovnateľné rozhranie v zostupnom poradí je dosť jednoduché. Všetko, čo musíme urobiť, je prejsť a Komparátor ako druhý parameter nášho triediť metóda.

V Jave 8 môžeme použiť Comparator.reverseOrder () čo naznačuje, že by sme chceli, aby bolo naše pole zoradené zostupne:

Arrays.sort (reťazce, Comparator.reverseOrder ()); assertArrayEquals (nový reťazec [] {"s", "učenie", "java", "baeldung"}, reťazce);

4.3. Objekty, ktoré sa neimplementujú, sú porovnateľné

Podobne ako pri triedení objektov, ktoré implementujú porovnateľné, môžeme obrátiť poradie našich zvyklostí Komparátor pridaním obrátené () na konci našej definície porovnania:

Arrays.sort (zamestnanci, Comparator.comparing (Employee :: getName) .reversed ()); assertArrayEquals (nový zamestnanec [] {mary, john, david}, zamestnanci);

5. Záver

V tomto článku sme diskutovali o tom, ako zoradiť polia primitívnych objektov a objektov vo vzostupnom a zostupnom poradí pomocou znaku Polia. Zoradiť metóda.

Ako obvykle, zdrojový kód z tohto článku nájdete na Githube.


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