ArrayList is de klasse die wordt aangeboden in het Collection-framework. In Java wordt het verzamelingsframework gedefinieerd in het pakket java.util. ArrayList wordt gebruikt om de elementen dynamisch op te slaan. Het is flexibeler dan een array omdat er geen maximale grootte is in ArrayList. ArrayList slaat de gegevens op een ongeordende manier op. In sommige gevallen moeten we de gegevens op een geordende manier herschikken.
Er zijn twee soorten ArrayList in Java. Eén daarvan is ArrayList van Wrapper-klasseobjecten en een andere is ArrayList van door de gebruiker gedefinieerde objecten. We zullen de sortering van beide typen ArrayList zien. Laten we beginnen met de eerste.
- Een ArrayList van Wrapper Class-objecten sorteren.
- Oplopende volgorde
- Aflopende volgorde
- Een ArrayList met door de gebruiker gedefinieerde objecten sorteren.
- Vergelijkbaar
- Comparator
Type 1: Een ArrayList van Wrapper Class-objecten sorteren
Een ArrayList van het klasseobject Wrapper is niets anders dan een ArrayList van objecten zoals String, gehele getallen, enz. Een ArrayList kan op twee manieren in oplopende en aflopende volgorde worden gesorteerd. De collectieklasse biedt twee methoden voor het sorteren van ArrayList. sort() en reverseOrder() voor respectievelijk oplopende en aflopende volgorde.
1(A)Oplopende volgorde
Deze sort()-methode accepteert het lijstobject als een parameter en retourneert een ArrayList, gesorteerd in oplopende volgorde. De syntaxis voor de methode sort() is zoals hieronder.
Collections.sort(objectOfArrayList);>
Alle elementen in de ArrayList moeten onderling vergelijkbaar zijn, anders wordt er gegooid ClassCastException . Onderling vergelijkbaar betekent hier dat alle items van de lijst hetzelfde gegevenstype hebben.
ArrayList list = new ArrayList(); list.add(132); list.add(321); list.add('India');> In het bovenstaande voorbeeld zien we dat een lijst drie elementen bevat, waarvan twee elementen van het type Integer zijn en één van het type String. De twee elementen in Integer zijn onderling vergelijkbaar, maar het element van het type String is niet vergelijkbaar met de andere twee. In dit geval kunnen we een ClassCastException krijgen. Daarom moet de lijst hetzelfde type elementen bevatten.
Laten we het volgende voorbeeld bekijken om het sorteren te begrijpen.
Java
// Java Program to Sort an ArrayList> // import java.util package> import> java.util.*;> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Define an objects of ArrayList class> >ArrayList list =>new> ArrayList();> >// Adding elements to the ArrayList> >list.add(>'India'>);> >list.add(>'Pakistan'>);> >list.add(>'Srilanka'>);> >list.add(>'USA'>);> >list.add(>'Australia'>);> >list.add(>'Japan'>);> >// Printing the unsorted ArrayList> >System.out.println(>'Before Sorting : '> + list);> >// Sorting ArrayList in ascending Order> >Collections.sort(list);> >// printing the sorted ArrayList> >System.out.println(>'After Sorting : '> + list);> >}> }> |
>
>
Uitgang:
Before Sorting : [India, Pakistan, Srilanka, USA, Australia, Japan] After Sorting : [Australia, India, Japan, Pakistan, Srilanka, USA]>
1(B) Aflopende volgorde
Om een ArrayList in aflopende volgorde te sorteren, gebruiken we omgekeerde volgorde() methode als argument van een sort() methode. we kunnen de methode reverseOrder() niet rechtstreeks aanroepen. Deze methode heeft twee parameters nodig: één is een object van ArrayList en de tweede parameter is de Collections.reversOrder() -methode. Deze methode retourneert ArrayList in aflopende volgorde. Vergelijkbaar met de methode sort() moet ArrayList onderling vergelijkbaar zijn, anders wordt er een resultaat gegenereerd ClassCastException .
Collections.sort(objectOfArrayList, Collections.reverseOrder());>
Hier sorteert deze methode de items eerst in oplopende volgorde en vervolgens wordt de volgorde van de gesorteerde items omgekeerd.
Java
// Java Program to Sort an ArrayList> // Importing generic java files> import> java.util.*;> public> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Define an objects of ArrayList class> >ArrayList list =>new> ArrayList();> >// Adding elements to the ArrayList> >list.add(>410>);> >list.add(>250>);> >list.add(>144>);> >list.add(>967>);> >list.add(>289>);> >list.add(>315>);> >// Printing the unsorted ArrayList> >System.out.println(>'Before Sorting : '> + list);> >// Sorting ArrayList in descending Order> >Collections.sort(list, Collections.reverseOrder());> >// Printing the sorted ArrayList> >System.out.println(>'After Sorting : '> + list);> >}> }> |
>
>
Uitgang:
Before Sorting : [410, 250, 144, 967, 289, 315] After Sorting : [967, 410, 315, 289, 250, 144]>
2. Een ArrayList met door de gebruiker gedefinieerde objecten sorteren
Een ArrayList met door de gebruiker gedefinieerde objecten is niets anders dan een ArrayL.ist met aangepaste objecten. In Java zijn er twee interfaces die kunnen worden gebruikt om collectie-elementen te sorteren. Vergelijkbaar en vergelijkend.
2(A) Vergelijkbaar
Vergelijkbaar biedt een enkele sorteervolgorde. Als we Comparable gebruiken, heeft dit invloed op de oorspronkelijke klasse. Vergelijkbare interface biedt vergelijk met() methode om elementen te sorteren. In Java wordt vergelijkbaar geleverd door het pakket java.lang. We kunnen de ArrayList sorteren door een beroep te doen op Collections.sort(Lijst)-methode .
Voorbeeld: Er wordt gesorteerd op basis van het aantal auto's op voorraad.
Java
// Java Program to Sort an ArrayList> // Importing generic java files> import> java.util.*;> // Implements comparable interface into custom class> class> Car>implements> Comparable {> >int> ModalNo;> >String name;> >int> stock;> >// Parameterized constructor of the class> >Car(>int> ModalNo, String name,>int> stock)> >{> >this>.ModalNo = ModalNo;> >this>.name = name;> >this>.stock = stock;> >}> >// Override the compareTo method> >public> int> compareTo(Car car)> >{> >if> (stock == car.stock)> >return> 0>;> >else> if> (stock>auto.voorraad)> >return> 1>;> >else> >return> ->1>;> >}> }> // Main driver method> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Create the ArrayList object> >ArrayList c =>new> ArrayList();> >c.add(>new> Car(>2018>,>'Kia'>,>20>));> >c.add(>new> Car(>2020>,>'MG'>,>13>));> >c.add(>new> Car(>2013>,>'creta'>,>10>));> >c.add(>new> Car(>2015>,>'BMW'>,>50>));> >c.add(>new> Car(>2017>,>'Audi'>,>45>));> >// Call the sort function> >Collections.sort(c);> >// Iterate over ArrayList using for each loop> >for> (Car car : c) {> >// Print the sorted ArrayList> >System.out.println(car.ModalNo +>' '> + car.name> >+>' '> + car.stock);> >}> >}> }> |
>
>
Uitgang:
sterpatroon afdrukken
2013 creta 10 2020 MG 13 2018 Kia 20 2017 Audi 45 2015 BMW 50>
2(B) Vergelijker
Comparator biedt meerdere sorteersequenties. De comparator heeft geen invloed op de oorspronkelijke klasse. Vergelijker biedt vergelijken() methode om elementen te sorteren. In Java wordt vergelijkbaar geleverd door het pakket java.util. We kunnen de ArrayList sorteren door de methode Collections.sort(List, Comparator) aan te roepen. Laten we één voorbeeld nemen.
Java
// Java Program to Sort an ArrayList> // Step 1: ImportingDB files> import> java.util.*;> // Class 1: Parent Class> class> Car {> >int> ModalNo;> >String name;> >int> stock;> >// Parameterized constructor> >Car(>int> ModalNo, String name,>int> stock)> >{> >this>.ModalNo = ModalNo;> >this>.name = name;> >this>.stock = stock;> >}> }> // Class 2: Child class> // creates the comparator for comparing stock value> class> StockComparator>implements> Comparator {> >// Function to compare> >public> int> compare(Car c1, Car c2)> >{> >if> (c1.stock == c2.stock)> >return> 0>;> >else> if> (c1.stock>c2.stock)> >return> 1>;> >else> >return> ->1>;> >}> }> class> GFG {> >// Main driver method> >public> static> void> main(String[] args)> >{> >// Create the ArrayList object> >ArrayList c =>new> ArrayList();> >c.add(>new> Car(>2018>,>'Kia'>,>20>));> >c.add(>new> Car(>2020>,>'MG'>,>13>));> >c.add(>new> Car(>2013>,>'creta'>,>10>));> >c.add(>new> Car(>2015>,>'BMW'>,>50>));> >c.add(>new> Car(>2017>,>'Audi'>,>45>));> >// Call the sort function> >Collections.sort(c,>new> StockComparator());> >// For each loop to iterate> >for> (Car car : c) {> > >// Print the sorted ArrayList> >System.out.println(car.stock +>' '> + car.name> >+>' '> + car.ModalNo);> >}> >}> }> |
>
>
Uitgang:
10 creta 2013 13 MG 2020 20 Kia 2018 45 Audi 2017 50 BMW 2015>