Kontrol af, om en liste er sorteret i Java

1. Oversigt

I denne vejledning ser vi forskellige måder at kontrollere, om en liste er sorteret i Java.

2. Iterativ tilgang

Den iterative tilgang er en enkel og intuitiv måde at kontrollere en sorteret liste på. I denne tilgang gentager vi listen og sammenligner de tilstødende elementer. Hvis et af de to tilstødende elementer ikke er sorteret, kan vi sige, at listen ikke er sorteret.

En liste kan enten sorteres i den naturlige rækkefølge eller i en brugerdefineret rækkefølge. Vi dækker begge disse sager ved hjælp af Sammenlignelig og Komparator grænseflader.

2.1. Ved brug af Sammenlignelig

Lad os først se en eksempel på en liste, hvis elementer er af typen Sammenlignelig. Her overvejer vi en liste, der indeholder objekter af typen Snor:

public static boolean isSorted (List listOfStrings) {if (isEmpty (listOfStrings) || listOfStrings.size () == 1) {return true; } Iterator iter = listOfStrings.iterator (); Strømstrøm, forrige = iter.next (); mens (iter.hasNext ()) {nuværende = iter.next (); if (previous.compareTo (current)> 0) {return false; } forrige = aktuel; } returner sandt }

2.2. Ved brug af Komparator

Lad os nu overveje en Medarbejder klasse, som ikke implementeres Sammenlignelig. Så i dette tilfælde er vi nødt til at bruge en Komparator for at sammenligne de tilstødende elementer på listen:

public static boolean isSorted (List medarbejdere, Comparator medarbejderComparator) {hvis (isEmpty (medarbejdere) || medarbejdere.størrelse () == 1) {returner sand; } Iterator iter = medarbejdere.iterator (); Medarbejderens nuværende, forrige = iter.next (); mens (iter.hasNext ()) {nuværende = iter.next (); hvis (medarbejderComparator.compare (forrige, aktuelle)> 0) {return false; } forrige = aktuel; } returner sandt }

Ovenstående to eksempler er ens. Den eneste forskel er i, hvordan vi sammenligner de tidligere og de aktuelle elementer på listen.

Ud over, vi kan også bruge Komparator at have præcis kontrol over sorteringskontrollen. Yderligere information om disse to findes i vores vejledning til Comparator og Comparable in Java.

3. Rekursiv tilgang

Nu ser vi, hvordan vi kontrollerer for en sorteret liste ved hjælp af rekursion:

public static boolean isSorted (List listOfStrings) {return isSorted (listOfStrings, listOfStrings.size ()); } public static boolean isSorted (List listOfStrings, int index) {if (index 0) {return false; } andet {return isSorted (listOfStrings, index - 1); }}

4. Brug af Guava

Det er ofte godt at bruge et tredjepartsbibliotek i stedet for at skrive vores egen logik. Guava-biblioteket har nogle hjælpeklasser, som vi kan bruge til at kontrollere, om en liste er sorteret.

4.1. Guava Bestilling Klasse

I dette afsnit vil vi se, hvordan du bruger Bestilling klasse i Guava for at se efter en sorteret liste.

Først ser vi et eksempel på en liste, der indeholder elementer af typen Sammenlignelig:

public static boolean isSorted (List listOfStrings) {return Ordering. naturlig (). erOrdret (listOfStrings); }

Derefter ser vi, hvordan vi kan kontrollere, om en liste over Medarbejder objekter sorteres ved hjælp af en Komparator:

public static boolean isSorted (Liste medarbejdere, Comparator medarbejderComparator) {return Ordering.from (medarbejderComparator) .isOrdered (medarbejdere); }

Vi kan også bruge naturlig (). reverseOrder () for at kontrollere, om en liste er sorteret i omvendt rækkefølge. Derudover kan vi bruge naturlig (). nullFirst () og naturlig().nullLast () for at kontrollere, om nul vises til den første eller den sidste af den sorterede liste.

At vide mere om Guava Bestilling klasse, kan vi henvise til vores guide til Guavas bestillingsartikel.

4.2. Guava Komparatorer Klasse

Hvis vi bruger Java 8 eller nyere, giver Guava et bedre alternativ med hensyn til Komparatorer klasse. Vi får se et eksempel på bruger erInOrder metode af denne klasse:

public static boolean isSorted (List listOfStrings) {return Comparators.isInOrder (listOfStrings, Comparator. naturalOrder ()); }

Som vi kan se, har vi i ovenstående eksempel brugt den naturlige rækkefølge til at kontrollere en sorteret liste. Vi kan også bruge en Komparator for at tilpasse sorteringskontrollen.

5. Konklusion

I denne artikel har vi set, hvordan vi kan kontrollere en sorteret liste ved hjælp af en simpel iterativ tilgang, en rekursiv tilgang og brug af Guava. Vi har også kort berørt brugen af Komparator og Sammenlignelig i beslutningen om sorteringskontrologikken.

Implementeringen af ​​alle disse eksempler og kodestykker findes på GitHub.


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