Kontrollere om en liste er sortert i Java

1. Oversikt

I denne opplæringen får vi se forskjellige måter å sjekke om en liste er sortert i Java.

2. Iterativ tilnærming

Den iterative tilnærmingen er en enkel og intuitiv måte å se etter en sortert liste. I denne tilnærmingen vil vi gjenta listen og sammenligne de tilstøtende elementene. Hvis noen av de to tilstøtende elementene ikke er sortert, kan vi si at listen ikke er sortert.

En liste kan enten sorteres i naturlig rekkefølge eller i en tilpasset rekkefølge. Vi vil dekke begge disse sakene ved hjelp av Sammenlignelig og Komparator grensesnitt.

2.1. Ved hjelp av Sammenlignelig

La oss først se en eksempel på en liste der elementene er av typen Sammenlignelig. Her vil vi vurdere en liste som inneholder objekter av typen String:

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 ()) {current = iter.next (); if (previous.compareTo (current)> 0) {return false; } forrige = nåværende; } returner sant; }

2.2. Ved hjelp av Komparator

La oss nå vurdere en Ansatt klasse, som ikke implementeres Sammenlignelig. Så i dette tilfellet må vi bruke en Komparator for å sammenligne de tilstøtende elementene i listen:

public static boolean isSorted (List ansatte, Comparator ansatteComparator) {if (isEmpty (ansatte) || ansatte.størrelse () == 1) {return true; } Iterator iter = ansatte.iterator (); Ansattes nåværende, forrige = iter.next (); mens (iter.hasNext ()) {current = iter.next (); hvis (ansatteComparator.compare (forrige, nåværende)> 0) {return false; } forrige = nåværende; } returner sant; }

Ovennevnte to eksempler er like. Den eneste forskjellen er i hvordan vi sammenligner de forrige og de nåværende elementene i listen.

I tillegg, vi kan også bruke Komparator å ha presis kontroll over sorteringskontrollen. Ytterligere informasjon om disse to er tilgjengelig i vår Comparator and Comparable in Java tutorial.

3. Rekursiv tilnærming

Nå får vi se hvordan vi kan se etter en sortert liste ved hjelp av rekursjon:

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

4. Bruke Guava

Det er ofte bra å bruke et tredjepartsbibliotek i stedet for å skrive vår egen logikk. Guava-biblioteket har noen bruksklasser som vi kan bruke til å sjekke om en liste er sortert.

4.1. Guava Bestilling Klasse

I denne delen vil vi se hvordan du bruker Bestilling klasse i Guava for å se etter en sortert liste.

Først ser vi et eksempel på en liste som inneholder elementer av typen Sammenlignelig:

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

Deretter ser vi hvordan vi kan sjekke om en liste over Ansatt objekter sorteres ved hjelp av a Komparator:

offentlig statisk boolsk isSorted (Liste ansatte, Comparator ansatteComparator) {retur Ordering.from (ansatteComparator) .isBestilt (ansatte); }

Vi kan også bruke naturlig (). reverseOrder () for å sjekke om en liste er sortert i omvendt rekkefølge. I tillegg kan vi bruke naturlig (). nullFirst () og naturlig().nullLast () for å sjekke om null vises til den første eller siste av den sorterte listen.

For å vite mer om Guava Bestilling klasse kan vi se vår guide til Guavas bestillingsartikkel.

4.2. Guava Sammenligning Klasse

Hvis vi bruker Java 8 eller nyere, gir Guava et bedre alternativ mht Sammenligning klasse. Vi får se et eksempel på bruker erInOrder metode av denne klassen:

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

Som vi kan se, i eksemplet ovenfor, har vi brukt den naturlige bestillingen for å se etter en sortert liste. Vi kan også bruke en Komparator for å tilpasse sorteringskontrollen.

5. Konklusjon

I denne artikkelen har vi sett hvordan vi kan se etter en sortert liste ved hjelp av en enkel iterativ tilnærming, en rekursiv tilnærming og bruk av Guava. Vi har også kort berørt bruken av Komparator og Sammenlignelig ved å bestemme logikk for sorteringskontroll.

Implementeringen av alle disse eksemplene og kodebiter finner du på GitHub.


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