logo

Programa Java para ordenar una ArrayList

ArrayList es la clase proporcionada en el marco de la Colección. En Java, el marco de la colección se define en el paquete java.util. ArrayList se utiliza para almacenar dinámicamente los elementos. Es más flexible que una matriz porque no hay límite de tamaño en ArrayList. ArrayList almacena los datos de forma desordenada. En algunos casos, necesitamos reorganizar los datos de forma ordenada.

Hay dos tipos de ArrayList en Java. Uno es ArrayList de objetos de clase Wrapper y otro es ArrayList de objetos definidos por el usuario. Veremos la clasificación de ambos tipos de ArrayList. Empecemos por el primero.



  1. Ordenar una ArrayList de objetos de clase Wrapper.
    • Orden ascendente
    • Orden descendiente
  2. Ordenar una ArrayList de objetos definidos por el usuario.
    • Comparable
    • Comparador

Tipo 1: ordenar una ArrayList de objetos de clase Wrapper

Un objeto ArrayList de clase Wrapper no es más que un ArrayList de objetos como cadenas, enteros, etc. Un ArrayList se puede ordenar de dos maneras, en orden ascendente y descendente. La clase de colección proporciona dos métodos para ordenar ArrayList. sort() y reverseOrder() para orden ascendente y descendente respectivamente.

1(A)Orden ascendente



Este método sort() acepta el objeto de lista como parámetro y devolverá una ArrayList ordenada en orden ascendente. La sintaxis del método sort() es la siguiente.

Collections.sort(objectOfArrayList);>

Todos los elementos en ArrayList deben ser mutuamente comparables; de lo contrario, arroja Excepción ClassCast . Aquí, mutuamente comparables significa que todos los elementos de la lista tienen el mismo tipo de datos.

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

En el ejemplo anterior, vemos que una lista tiene tres elementos, de los cuales dos elementos son de tipo Entero y uno es de tipo Cadena. Los dos elementos que están en Integer son mutuamente comparables pero el elemento que es de tipo String no es comparable con los otros dos. En este caso, podemos obtener una ClassCastException. Por tanto, la lista debe tener el mismo tipo de elementos.



Consideremos el siguiente ejemplo para comprender la clasificación.

Java


¿Puede la clase abstracta tener constructor?



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

>

>

Producción:

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

1(B) Orden descendente

Para ordenar un ArrayList en orden descendente usamos orden inverso() método como argumento de un método sort(). No podemos llamar directamente al método ReverseOrder(). Este método toma dos parámetros, uno es un objeto de ArrayList y el segundo parámetro es el método Collections.reversOrder(). Este método devolverá ArrayList en orden descendente. Similar al método sort(), ArrayList debe ser mutuamente comparable, de lo contrario arroja Excepción ClassCast .

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

Aquí, este método primero ordena los elementos en orden ascendente y luego invertirá el orden de los elementos ordenados.

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

>

>

Producción:

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

2. Ordenar una ArrayList de objetos definidos por el usuario

Una ArrayList de objetos definidos por el usuario no es más que un ArrayL.ist de objetos personalizados. En Java, hay dos interfaces que se pueden utilizar para ordenar elementos de la colección. Comparable y Comparador.

2(A) comparables

Comparable proporciona una única secuencia de clasificación. Si usamos Comparable afectará la clase original. La interfaz comparable proporciona comparar con() Método para ordenar elementos. En Java, el paquete java.lang proporciona una comparación. Podemos ordenar ArrayList invocando Método Collections.sort(Lista) .

Ejemplo: La clasificación se realiza según la cantidad de automóviles en stock.

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

>

>

escáner.siguiente java

Producción:

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

2(B) Comparador

Comparator proporciona múltiples secuencias de clasificación. El comparador no afectará la clase original. El comparador proporciona comparar() Método para ordenar elementos. En Java, el paquete java.util proporciona una comparación. Podemos ordenar ArrayList invocando el método Collections.sort(List, Comparator). Tomemos un ejemplo.

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

>

>

Producción:

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