logo

Java-program för att sortera en ArrayList

ArrayList är klassen som tillhandahålls i samlingsramverket. I Java är samlingsramverket definierat i paketet java.util. ArrayList används för att dynamiskt lagra elementen. Det är mer flexibelt än en array eftersom det inte finns någon storleksbegränsning i ArrayList. ArrayList lagrar data på ett oordnat sätt. I vissa fall behöver vi ordna om uppgifterna på ett ordnat sätt.

Det finns två typer av ArrayList i java. En är ArrayList av Wrapper-klassobjekt och en annan är ArrayList av användardefinierade objekt. Vi kommer att se sorteringen av båda typerna av ArrayList. Låt oss börja med den första.



  1. Sortera en ArrayList av Wrapper Class-objekt.
    • Stigande ordning
    • Fallande ordning
  2. Sortera en ArrayList med användardefinierade objekt.
    • Jämförbar
    • Komparator

Typ 1: Sortera en ArrayList av Wrapper Class-objekt

Ett ArrayList of Wrapper-objekt är inget annat än en ArrayList av objekt som String, Integer, etc. En ArrayList kan sorteras på två sätt i stigande och fallande ordning. Samlingsklassen tillhandahåller två metoder för att sortera ArrayList. sort() och reverseOrder() för stigande respektive fallande ordning.

1(A)Stigande ordning



Den här sort()-metoden accepterar listobjektet som en parameter och den returnerar en ArrayList sorterad i stigande ordning. Syntaxen för sort()-metoden är som nedan.

Collections.sort(objectOfArrayList);>

Alla element i ArrayList måste vara ömsesidigt jämförbara, annars kastar den ClassCastException . Här betyder ömsesidigt jämförbar att alla objekt i listan har samma datatyp.

resa men
ArrayList list = new ArrayList(); list.add(132); list.add(321); list.add('India');>

I exemplet ovan ser vi att en lista har tre element, varav två element är av heltalstyp och ett är strängtyp. De två elementen som finns i heltal är inbördes jämförbara men elementet som är av String-typ är inte jämförbart med de andra två. I det här fallet kan vi få en ClassCastException. Därför måste listan ha samma typ av element.



Låt oss överväga följande exempel för att förstå sortering.

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);> >}> }>

>

>

Produktion:

Before Sorting : [India, Pakistan, Srilanka, USA, Australia, Japan] After Sorting : [Australia, India, Japan, Pakistan, Srilanka, USA]>

1(B) fallande ordning

För att sortera en ArrayList i fallande ordning använder vi omvänd ordning() metod som ett argument av en sort() metod. vi kan inte direkt anropa reverseOrder()-metoden. Denna metod tar två parametrar, den ena är ett objekt av ArrayList och den andra parametern är metoden Collections.reversOrder(). Denna metod returnerar ArrayList i fallande ordning. I likhet med sort()-metoden måste ArrayList vara inbördes jämförbar, annars kastar den ClassCastException .

Collections.sort(objectOfArrayList, Collections.reverseOrder());>

Här sorterar den här metoden först objekten i stigande ordning och sedan kommer den att omvända ordningen på sorterade objekt.

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);> >}> }>

>

>

Produktion:

Before Sorting : [410, 250, 144, 967, 289, 315] After Sorting : [967, 410, 315, 289, 250, 144]>

2. Sortera en ArrayList med användardefinierade objekt

En ArrayList av användardefinierade objekt är inget annat än en ArrayL.ist av anpassade objekt. I Java finns det två gränssnitt som kan användas för att sortera samlingselement. Jämförbar och Comparator.

2(A) Jämförbar

Jämförbar ger en enda sorteringssekvens. Om vi ​​använder Comparable kommer det att påverka den ursprungliga klassen. Jämförbart gränssnitt ger jämföra med() metod för att sortera element. I java tillhandahålls jämförbart av java.lang-paketet. Vi kan sortera ArrayList genom att anropa Collections.sort(List)-metoden .

Exempel: Sortering sker utifrån antal bilar i lager.

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>car.stock)> >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);> >}> >}> }>

>

>

Produktion:

2013 creta 10 2020 MG 13 2018 Kia 20 2017 Audi 45 2015 BMW 50>

2(B) Komparator

Comparator tillhandahåller flera sorteringssekvenser. Komparatorn kommer inte att påverka den ursprungliga klassen. Komparator ger jämföra() metod för att sortera element. I java tillhandahålls jämförbart av java.util-paketet. Vi kan sortera ArrayList genom att anropa metoden Collections.sort(List, Comparator). Låt oss ta ett exempel.

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);> >}> >}> }>

>

>

Produktion:

10 creta 2013 13 MG 2020 20 Kia 2018 45 Audi 2017 50 BMW 2015>