Kontrola, či je pole zoradené v prostredí Java
1. Prehľad
V tomto tutoriáli uvidíme rôzne spôsoby, ako skontrolovať, či je pole zoradené.
Pred začatím by však bolo zaujímavé skontrolovať, ako zoradiť polia v Jave.
2. So slučkou
Jedným zo spôsobov kontroly je a pre slučka. Môžeme iterovať všetky hodnoty poľa jednu po druhej.
Pozrime sa, ako na to.
2.1. Primitívne pole
Jednoducho povedané, budeme iterovať na všetkých pozíciách okrem tej poslednej. Je to preto, že budeme porovnávať jednu pozíciu s ďalšou.
Ak niektoré z nich nie sú zoradené, metóda sa vráti nepravdivé. Ak sa nevráti žiadne z porovnaní nepravda, to znamená, že pole je zoradené:
boolean isSorted (int [] pole) {for (int i = 0; i pole [i + 1]) return false; } návrat pravdivý; }
2.2. Objekty, ktoré sa implementujú Porovnateľné
Niečo podobné môžeme urobiť s objektmi, ktoré implementujú Porovnateľné. Namiesto použitia znaku viac ako použijeme porovnať s:
boolean isSorted (Comparable [] array) {for (int i = 0; i 0) return false; } návrat pravdivý; }
2.3. Objekty, ktoré sa neimplementujú Porovnateľné
Čo však v prípade, že sa naše objekty neimplementujú Porovnateľné? V takom prípade môžeme namiesto toho Vytvor Komparátor.
V tomto príklade použijeme Zamestnanec objekt. Je to jednoduché POJO s tromi poľami:
public class Zamestnanec implementuje Serializable {private int id; súkromné meno reťazca; súkromný int vek; // zakladatelia a zakladatelia}
Potom si musíme zvoliť, do ktorého poľa sa chceme zoradiť. Tu si objednajme podľa Vek lúka:
Comparator byAge = Comparator.comparingInt (zamestnanec :: getAge);
A potom môžeme zmeniť našu metódu, aby sme použili aj a Komparátor:
boolean isSorted (Object [] array, Comparator comparator) {for (int i = 0; i 0) return false; } návrat pravdivý; }
3. Rekurzívne
Namiesto toho samozrejme môžeme použiť rekurziu. Myšlienkou je, že skontrolujeme dve pozície v poli a potom ich budeme opakovať, kým nezkontrolujeme všetky pozície.
3.1. Primitívne pole
Pri tejto metóde skontrolujeme posledné dve polohy. Ak sú zoradené, zavoláme metódu znova, ale s predchádzajúcou pozíciou. Ak jedna z týchto pozícií nie je zoradená, metóda sa vráti nepravda:
boolean isSorted (int [] pole, int dĺžka) dĺžka poľa [dĺžka - 1]) return false; return isSorted (pole, dĺžka - 1);
3.2. Objekty, ktoré sa implementujú Porovnateľné
Teraz sa pozrime znova na objekty, ktoré sa implementujú Porovnateľné. Uvidíme, že rovnaký prístup bude porovnať s bude pracovať:
boolean isSorted (porovnateľné pole [], dĺžka int)
3.3. Objekty, ktoré sa neimplementujú Porovnateľné
V poslednej dobe skúsme naše Zamestnanec objekt znova pridaním Komparátor parameter:
boolean isSorted (Object [] pole, komparátor komparátor, int dĺžka) if (pole == null
4. Záver
V tomto tutoriáli sme videli, ako skontrolovať, či je pole zoradené alebo nie. Videli sme iteratívne aj rekurzívne riešenia.
Naše odporúčanie je použiť riešenie slučky. Je to čistejšie a ľahšie sa číta.
Ako obvykle, zdrojový kód z tohto tutoriálu nájdete na GitHub.