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.