Controleren of een lijst in Java is gesorteerd

1. Overzicht

In deze tutorial zullen we zien verschillende manieren om te controleren of een lijst in Java is gesorteerd.

2. Iteratieve benadering

De iteratieve benadering is een eenvoudige en intuïtieve manier om te zoeken naar een gesorteerde lijst. In deze benadering zullen we de lijst herhalen en de aangrenzende elementen vergelijken. Als een van de twee aangrenzende elementen niet is gesorteerd, kunnen we zeggen dat de lijst niet is gesorteerd.

Een lijst kan worden gesorteerd in de natuurlijke volgorde of in een aangepaste volgorde. We behandelen beide gevallen met Vergelijkbaar en Comparator interfaces.

2.1. Gebruik makend van Vergelijkbaar

Laten we eerst een voorbeeld van een lijst waarvan de elementen van het type zijn Vergelijkbaar. Hier zullen we een lijst bekijken met objecten van het type Draad:

openbare statische boolean isSorted (List listOfStrings) {if (isEmpty (listOfStrings) || listOfStrings.size () == 1) {return true; } Iterator iter = listOfStrings.iterator (); String huidige, vorige = iter.next (); while (iter.hasNext ()) {current = iter.next (); if (previous.compareTo (current)> 0) {return false; } vorige = huidig; } retourneren waar; }

2.2. Gebruik makend van Comparator

Laten we nu eens kijken naar een Werknemer class, die niet implementeert Vergelijkbaar. Dus in dit geval moeten we een Comparator om de aangrenzende elementen van de lijst te vergelijken:

openbare statische boolean isSorted (Lijst werknemers, Comparator werknemerComparator) {if (isEmpty (werknemers) || werknemers.size () == 1) {terugkeer waar; } Iterator iter = workers.iterator (); Huidige werknemer, vorige = iter.next (); while (iter.hasNext ()) {current = iter.next (); if (employeeComparator.compare (vorige, huidige)> 0) {return false; } vorige = huidig; } retourneren waar; }

De bovenstaande twee voorbeelden zijn vergelijkbaar. Het enige verschil zit hem in de manier waarop we de vorige en huidige elementen van de lijst vergelijken.

Daarnaast, we kunnen ook gebruiken Comparator om nauwkeurige controle te hebben over de sorteercontrole. Meer informatie over deze twee is beschikbaar in onze tutorial Comparator en Comparable in Java.

3. Recursieve benadering

Nu zullen we zien hoe we kunnen controleren op een gesorteerde lijst met behulp van recursie:

openbare statische boolean isSorted (List listOfStrings) {return isSorted (listOfStrings, listOfStrings.size ()); } openbare statische boolean isSorted (List listOfStrings, int index) {if (index 0) {return false; } else {return isSorted (listOfStrings, index - 1); }}

4. Guava gebruiken

Het is vaak goed om een ​​bibliotheek van derden te gebruiken in plaats van onze eigen logica te schrijven. De Guava-bibliotheek heeft enkele hulpprogramma-klassen die we kunnen gebruiken om te controleren of een lijst is gesorteerd.

4.1. Guave Bestellen Klasse

In deze sectie zullen we zien hoe u de Bestellen klasse in Guava om te controleren op een gesorteerde lijst.

Eerst zien we een voorbeeld van een lijst met elementen van het type Vergelijkbaar:

openbare statische boolean isSorted (List listOfStrings) {return Ordering. natural (). isOrdered (listOfStrings); }

Vervolgens zullen we zien hoe we kunnen controleren of er een lijst met Werknemer objecten worden gesorteerd met behulp van een Comparator:

openbare statische boolean isSorted (Lijst medewerkers, Comparator medewerkerComparator) {return Ordering.from (medewerkerComparator) .isOrdered (medewerkers); }

We kunnen ook gebruiken natuurlijk (). reverseOrder () om te controleren of een lijst in omgekeerde volgorde is gesorteerd. Daarnaast kunnen we gebruik maken van natuurlijk (). nullFirst () en natuurlijk ().nullLast () om te controleren of nul verschijnt aan de eerste of de laatste van de gesorteerde lijst.

Om meer te weten over Guava Bestellen klasse, kunnen we onze gids verwijzen naar het artikel over het bestellen van Guava.

4.2. Guave Vergelijkers Klasse

Als we Java 8 of hoger gebruiken, biedt Guava een beter alternatief in termen van Vergelijkers klasse. We zullen een voorbeeld zien van de ... gebruiken isInOrder methode van deze klasse:

openbare statische boolean isSorted (List listOfStrings) {retourneer Comparators.isInOrder (listOfStrings, Comparator. naturalOrder ()); }

Zoals we kunnen zien, hebben we in het bovenstaande voorbeeld de natuurlijke volgorde gebruikt om te controleren of er een gesorteerde lijst is. We kunnen ook een Comparator om de sorteercontrole aan te passen.

5. Conclusie

In dit artikel hebben we gezien hoe we kunnen zoeken naar een gesorteerde lijst met behulp van een eenvoudige iteratieve benadering, een recursieve benadering en met behulp van Guava. We hebben ook kort ingegaan op het gebruik van Comparator en Vergelijkbaar bij het bepalen van de sorteercontrolelogica.

De implementatie van al deze voorbeelden en codefragmenten is te vinden op GitHub.


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