Programa Java para ordenar LinkedList usando Comparable

En Java, LinkedList es parte del marco de colección proporcionado en el paquete java.util . LinkedList es una estructura de datos lineal donde todos los elementos están ordenados en ubicaciones de memoria contiguas. La ventaja de LinkedList es que es dinámico y fácil de insertar y eliminar cualquier elemento. No podemos acceder a ningún Node de LinkedList directamente, necesitamos comenzar con el Node Head y atravesar una LinkedList.

Comparable proporciona una única secuencia de clasificación. Si usamos Comparable, afectará a la clase original. Comparable Interface proporciona el método compareTo() para ordenar elementos. En java, el paquete java.lang proporciona comparables. Podemos ordenar la LinkedList invocando el método Collections.sort(List). 

LinkedList se puede ordenar en el siguiente orden usando Comparable:

  1. orden ascendente
  2. Orden descendiente
    • Uso de Collections.reverseOrder()
    • Anular el método CompareTo()

Tipo 1: orden ascendente

Para ordenar una LinkedList en orden Ascendente usando Comparable, necesitamos implementar la interfaz Comparable en nuestra clase y anular el método CompareTo() para ordenar una LinkedList con respecto a elementos específicos. Después de eso, necesitamos usar el método Collection.sort() para ordenar una LinkedList.

Sintaxis: Collections.sort(Listobject)

Ejemplo:

Java

// Java Program to Sort LinkedList using Comparable
// in ascending order
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
 
// User defined class implements Comparable
class Student implements Comparable<Student> {
    String Name;
    int Id;
    int Rank;
 
    Student(String name, int id, int rank)
    {
        this.Name = name;
        this.Id = id;
        this.Rank = rank;
    }
 
    // Override the compareTo() method
    @Override public int compareTo(Student s)
    {
        if (Rank > s.Rank) {
            return 1;
        }
        else if (Rank == s.Rank) {
            return 0;
        }
        else {
            return -1;
        }
    }
}
 
public class Main {
    // Main driver method
    public static void main(String[] args)
    {
        // Create one LinkedList for Student object
        LinkedList<Student> List
            = new LinkedList<Student>();
        List.add(new Student("Meet", 32, 2));
        List.add(new Student("Jhon", 11, 5));
        List.add(new Student("Sham", 92, 1));
        List.add(new Student("William", 86, 3));
        List.add(new Student("Harry", 35, 4));
 
        // Print the Unsorted LinkedList
        System.out.println("UnSorted List");
        for (Student s : List) {
            System.out.println(s.Rank + " " + s.Name + " "
                               + s.Id);
        }
        System.out.println();
 
        // sort in ascending order
        Collections.sort(List);
 
        // Print the sorted LinkedList
        System.out.println("Sorted List");
        for (Student s : List) {
            // Print the sorted LinkedList
            System.out.println(s.Rank + " " + s.Name + " "
                               + s.Id);
        }
    }
}
Producción

UnSorted List
2 Meet 32
5 Jhon 11
1 Sham 92
3 William 86
4 Harry 35

Sorted List
1 Sham 92
2 Meet 32
3 William 86
4 Harry 35
5 Jhon 11

Complejidad de tiempo: O(n log n)

Tipo 2: orden descendente

Para ordenar una Lista Vinculada en orden Descendente tenemos dos Enfoques.

A. Usando Collections.reverseOrder()

En este enfoque, primero tenemos que ordenar una LinkedList en orden Ascendente y luego usar Collections.reverseOrder() podemos invertir el orden de la LinkedList ordenada.

Sintaxis: Collections.sort(Listobject,Collections.reverseOrder())

Ejemplo:

Java

// Sort LinkedList using Comparable in Java
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
 
// User defined class implements Comparable
class Student implements Comparable<Student> {
    String Name;
    int Id;
    int Rank;
 
    Student(String name, int id, int rank)
    {
        this.Name = name;
        this.Id = id;
        this.Rank = rank;
    }
 
    // Override the compareTo() method
    @Override public int compareTo(Student s)
    {
        if (Rank > s.Rank) {
            return 1;
        }
        else if (Rank == s.Rank) {
            return 0;
        }
        else {
            return -1;
        }
    }
}
 
public class Main {
    // Main driver method
    public static void main(String[] args)
    {
        // Create one LinkedList for Student object
        LinkedList<Student> List
            = new LinkedList<Student>();
        List.add(new Student("Meet", 32, 2));
        List.add(new Student("Jhon", 11, 5));
        List.add(new Student("Sham", 92, 1));
        List.add(new Student("William", 86, 3));
        List.add(new Student("Harry", 35, 4));
 
        // Print the Unsorted LinkedList
        System.out.println("UnSorted List");
        for (Student s : List) {
            System.out.println(s.Rank + " " + s.Name + " "
                               + s.Id);
        }
        System.out.println();
 
        // sort in descending order
        Collections.sort(List, Collections.reverseOrder());
 
        // Print the sorted LinkedList
        System.out.println("Sorted List");
        for (Student s : List) {
            // Print the sorted LinkedList
            System.out.println(s.Rank + " " + s.Name + " "
                               + s.Id);
        }
    }
}
Producción

UnSorted List
2 Meet 32
5 Jhon 11
1 Sham 92
3 William 86
4 Harry 35

Sorted List
5 Jhon 11
4 Harry 35
3 William 86
2 Meet 32
1 Sham 92

Complejidad de tiempo: O(n log n)

B. Anular el método CompareTo()

En este enfoque, tenemos que anular el método compareTo() de tal manera que devuelva una LinkedList en orden descendente.

Ejemplo:

Java

// Sort LinkedList using Comparable in Java
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
 
// User defined class implements Comparable
class Student implements Comparable<Student> {
    String Name;
    int Id;
    int Rank;
 
    Student(String name, int id, int rank)
    {
        this.Name = name;
        this.Id = id;
        this.Rank = rank;
    }
 
    // Override the compareTo() method
    @Override public int compareTo(Student s)
    {
        // Changed the Comparison logic
        if (Rank < s.Rank) {
            return 1;
        }
        else if (Rank == s.Rank) {
            return 0;
        }
        else {
            return -1;
        }
    }
}
 
public class Main {
    // Main driver method
    public static void main(String[] args)
    {
        // Create ine LinkedList for Student object
        LinkedList<Student> List
            = new LinkedList<Student>();
        List.add(new Student("Meet", 32, 2));
        List.add(new Student("Jhon", 11, 5));
        List.add(new Student("Sham", 92, 1));
        List.add(new Student("William", 86, 3));
        List.add(new Student("Harry", 35, 4));
 
        // Print the Unsorted LinkedList
        System.out.println("UnSorted List");
        for (Student s : List) {
            System.out.println(s.Rank + " " + s.Name + " "
                               + s.Id);
        }
        System.out.println();
 
        // sort in ascending order
        Collections.sort(List);
 
        // Print the sorted LinkedList
        System.out.println("Sorted List");
        for (Student s : List) {
            // Print the sorted LinkedList
            System.out.println(s.Rank + " " + s.Name + " "
                               + s.Id);
        }
    }
}
Producción

UnSorted List
2 Meet 32
5 Jhon 11
1 Sham 92
3 William 86
4 Harry 35

Sorted List
5 Jhon 11
4 Harry 35
3 William 86
2 Meet 32
1 Sham 92

Complejidad de tiempo: O(n log n)

Publicación traducida automáticamente

Artículo escrito por meetsuvariya y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *