Annak ellenőrzése, hogy egy lista rendezve van-e a Java-ban
1. Áttekintés
Ebben az oktatóanyagban meglátjuk különböző módon ellenőrizheti, hogy a listák rendezve vannak-e a Java-ban.
2. Iteratív megközelítés
Az iteratív megközelítés egyszerű és intuitív módszer a rendezett lista ellenőrzésére. Ebben a megközelítésben iteráljuk a listát, és összehasonlítjuk a szomszédos elemeket. Ha a két szomszédos elem bármelyike nincs rendezve, akkor azt mondhatjuk, hogy a lista nincs rendezve.
A lista rendezhető természetes sorrendben vagy egyedi sorrendben. Mindkét esetet felhasználjuk Hasonló és Összehasonlító interfészek.
2.1. Használata Hasonló
Először nézzük meg a példa egy listára, amelynek elemei típusúak Hasonló. Itt megvizsgálunk egy listát, amely típusú objektumokat tartalmaz Húr:
public static boolean isSorted (List listOfStrings) {if (isEmpty (listOfStrings) || listOfStrings.size () == 1) {return true; } Iterátor iter = listOfStrings.iterator (); String current, előző = iter.next (); while (iter.hasNext ()) {current = iter.next (); if (előző.összehasonlításTo (aktuális)> 0) {return false; } előző = aktuális; } return true; }
2.2. Használata Összehasonlító
Most vegyük fontolóra egy Munkavállaló osztály, amely nem valósul meg Hasonló. Tehát ebben az esetben a Összehasonlító a lista szomszédos elemeinek összehasonlításához:
public static boolean isSorted (List alkalmazottak, Comparator workerComparator) {if (isEmpty (alkalmazottak) || alkalmazottak.méret () == 1) {return true; } Iterátor iter = alkalmazottak.iterátor (); Munkavállalói aktuális, előző = iter.next (); while (iter.hasNext ()) {current = iter.next (); if (workerComparator.compare (előző, aktuális)> 0) {return false; } előző = aktuális; } return true; }
A fenti két példa hasonló. Az egyetlen különbség abban áll, hogy összehasonlítjuk a lista előző és aktuális elemeit.
Továbbá, használhatjuk is Összehasonlító hogy pontosan ellenőrizhesse a válogatás ellenőrzését. Erről a kettőről további információ a Comparator és a Comparable in Java oktatóanyagunkban található.
3. Rekurzív megközelítés
Most meglátjuk, hogyan lehet rendezett listát keresni rekurzióval:
public static boolean isSorted (List listOfStrings) {return isSorted (listOfStrings, listOfStrings.size ()); } public static boolean isSorted (List listOfStrings, int index) {if (index 0) {return false; } else {return isSorted (listOfStrings, index - 1); }}
4. Guava használata
Gyakran jó, ha egy harmadik fél könyvtárát használjuk a saját logikánk megírása helyett. A guavai könyvtár tartalmaz néhány segédosztályt, amelyek segítségével ellenőrizhetjük, hogy a lista rendezve van-e.
4.1. Gujávafa Rendelés Osztály
Ebben a szakaszban megtudjuk, hogyan kell használni a Rendelés osztály Guavában, hogy ellenőrizze a rendezett listát.
Először látunk egy példát egy listára, amely típusú elemeket tartalmaz Hasonló:
public static boolean isSorted (List listOfStrings) {return Rendezés. természetes (). isOrdered (listOfStrings); }
Ezután meglátjuk, hogyan ellenőrizhetjük a listát Munkavállaló az objektumok rendezése a Összehasonlító:
public static boolean isSorted (List alkalmazottak, Comparator workerComparator) {return Ordering.from (workerComparator) .isRendelt (alkalmazottak); }
Továbbá használhatjuk természetes (). reverseOrder () hogy ellenőrizze, hogy egy lista fordított sorrendben van-e rendezve. Ezen felül használhatjuk természetes (). nullFirst () és természetes().nullLast () hogy ellenőrizze nulla megjelenik a rendezett lista első vagy utolsó helyén.
Hogy többet tudjon Guaváról Rendelés osztályba sorolhatjuk Útmutatónkat Guava rendelési cikkéhez.
4.2. Gujávafa Összehasonlítók Osztály
Ha Java 8-at vagy újabbat használunk, akkor a Guava jobb alternatívát kínál Összehasonlítók osztály. Látunk egy példát használni a rendben van módszer ebbe az osztályba:
public static boolean isSorted (List listOfStrings) {return Comparators.isInOrder (listOfStrings, Comparator. naturalOrder ()); }
Mint láthatjuk, a fenti példában a természetes rendezést használtuk a rendezett lista ellenőrzésére. Használhatjuk a Összehasonlító a válogatás ellenőrzésének testreszabásához.
5. Következtetés
Ebben a cikkben láthattuk, hogyan ellenőrizhetjük a rendezett listát egy egyszerű iteratív megközelítés, egy rekurzív megközelítés és a Guava használatával. Röviden kitértünk a Összehasonlító és Hasonló a rendezés ellenőrzési logikájának eldöntésében.
Ezen példák és kódrészletek megvalósítása megtalálható a GitHub-on.