Java >> Java Tutorial >  >> Java

Java – Wie sortiert man LinkedList mit der Methode Collections.sort()?

In diesem Artikel werden wir besprechen, wie LinkedList sortiert wird Elemente aufsteigend &absteigend Bestellung mit Collections.sort() Methode

1. Collections.sort()-Methode

  • Sortiert die angegebene Liste in aufsteigend Reihenfolge gemäß der natürlichen Reihenfolge seiner Elemente
  • Alle Elemente in der Liste muss das Comparable implementieren Schnittstelle
  • Außerdem alle Elemente in der Liste müssen miteinander vergleichbar sein
  • Das heißt, e1.compareTo(e2) darf keine ClassCastException auslösen für alle Elemente e1 und e2 in der Liste
  • Diese Sortierung ist garantiert stabil :Gleiche Elemente werden nicht umgeordnet als Ergebnis der Sortierung
  • Zeichenfolge und Wrapper-Klassen implementiert vergleichbar Schnittstelle, also wenn wir Elemente vom String-Typ speichern dann können wir sort() von Collections verwenden Methode, um Elemente aufsteigend zu sortieren Reihenfolge der Alphabete
  • Hinweis: es sollte keine NULL geben Objekte, sonst NullPointerException wird geworfen
  • Methodensignatur:- öffentlich statisch > void sort(List list)

1.1 Sortieren von verknüpften Listen ganzzahliger Zahlen

  • Eine verknüpfte Liste enthält Ganzzahlen in Einfügungsreihenfolge
  • Wir sortieren diese Ganzzahlen in natürlicher Reihenfolge (oder aufsteigende Reihenfolge ) mit Collections.sort() Methode

SortLinkedListOfIntegerUsingCollectionsSortMethod.java

package net.bench.resources.sort.linkedlist.java;

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;

public class SortLinkedListOfIntegerUsingCollectionsSortMethod {

	public static void main(String[] args) {

		// 1. create LinkedList
		List<Integer> numbers = new LinkedList<>();


		// 1.2 add integer numbers to LL
		numbers.add(87);
		numbers.add(18);
		numbers.add(98);
		numbers.add(64);
		numbers.add(25);
		numbers.add(77);
		numbers.add(54);


		// 1.3 original LinkedList in insertion order
		System.out.println("1. Original LinkedList<Integer> "
				+ "as per insertion-order :- \n");


		// 1.4 Iterating using enhanced for-loop
		for(int num : numbers){
			System.out.println(num);
		}


		// 2. Collections.sort() - natural order
		Collections.sort(numbers);


		// 2.1 print to console
		System.out.println("\n2. Natural order of "
				+ "LinkedList<Integer> :- \n");


		// 2.2 Iterating using enhanced for-loop
		for(int num : numbers){
			System.out.println(num);
		}


		// 3. Collections.sort() - reverse order
		Collections.sort(numbers, Comparator.reverseOrder());


		// 3.1 print to console
		System.out.println("\n3. Reverse order of "
				+ "LinkedList<Integer> :- \n");


		// 3.2 Iterating using enhanced for-loop
		for(int num : numbers){
			System.out.println(num);
		}
	}
}

Ausgabe:

1. Original LinkedList<Integer> as per insertion-order :- 

87
18
98
64
25
77
54

2. Natural order of LinkedList<Integer> :- 

18
25
54
64
77
87
98

3. Reverse order of LinkedList<Integer> :- 

98
87
77
64
54
25
18

1.2 LinkedList von String-Elementen sortieren

  • Eine verknüpfte Liste enthält String-Elemente in Einfügungsreihenfolge
  • Wir sortieren diese String-Elemente in alphabetischer Reihenfolge mit Collections.sort() Methode

SortLinkedListOfStringUsingCollectionsSortMethod.java

package net.bench.resources.sort.linkedlist.java;

import java.util.LinkedList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortLinkedListOfStringUsingCollectionsSortMethod {

	public static void main(String[] args) {

		// 1. create LinkedList
		List<String> names = new LinkedList<>();


		// 1.1 add names to LL
		names.add("Karthik");
		names.add("Nagarjuna");
		names.add("Ramki");
		names.add("Surya");
		names.add("Ajith");
		names.add("Prasanna");


		// 1.2 original LinkedList as per insertion order
		System.out.println("1. Original LinkedList<String> "
				+ "as per insertion-order :- \n");


		// 1.3 Iterating using enhanced for-loop
		for(String str : names){
			System.out.println(str);
		}


		// 2. Collections.sort() - alphabetical order
		Collections.sort(names);


		// 2.1 print to console
		System.out.println("\n2. Alphabetically sorted-order "
				+ "of LinkedList<String> :- \n");


		// 2.2 Iterating using enhanced for-loop
		for(String str : names){
			System.out.println(str);
		}


		// 3. Collections.sort() - reverse alphabetical order
		Collections.sort(names, new Comparator<String>() {

			@Override
			public int compare(String str1, String str2) {
				return str2.compareTo(str1);
			}
		});


		// 3.1 print to console
		System.out.println("\n3. Reverse alphabetically sorted-order "
				+ "of LinkedList<String> :- \n");


		// 3.2 Iterating using enhanced for-loop
		for(String str : names){
			System.out.println(str);
		}
	}
}

Ausgabe:

1. Original LinkedList<String> as per insertion-order :- 

Karthik
Nagarjuna
Ramki
Surya
Ajith
Prasanna

2. Alphabetically sorted-order of LinkedList<String> :- 

Ajith
Karthik
Nagarjuna
Prasanna
Ramki
Surya

3. Reverse alphabetically sorted-order of LinkedList<String> :- 

Surya
Ramki
Prasanna
Nagarjuna
Karthik
Ajith

2. Vergleichbare Schnittstelle &Methode Collections.sort()

  • Vergleicht dieses Objekt mit dem angegebenen Objekt zur Bestellung
  • Gibt ein Negativ zurück Ganzzahl, Null oder positiv Ganzzahl als dieses Objekt ist kleiner als , gleich , oder größer als das angegebene Objekt
  • Methodensignatur:- int CompareTo(T-Objekt)

2.1 Sortieren der verknüpften Liste von Schülerobjekten

  • Eine verknüpfte Liste enthält Schülerobjekte mit Attributen wie ID, Name und ihr Alter in Einfügungsreihenfolge
  • Wir sortieren diese Schülerobjekte in natürlicher Reihenfolge nach ihrem Alter mit Collections.sort() Methode

Student.java

package net.bench.resources.sort.linkedlist.java;

public class Student implements Comparable<Student>  {

	// member variables
	private int id;
	private String name;
	private int age;

	// 3-arg parameterized constructor

	// getters & setters

	// toString()


	// compareTo()
	@Override
	public int compareTo(Student s) {
		return Integer.compare(this.age, s.getAge());
	}
}

SortLinkedListOfIntegerUsingStream.java

package net.bench.resources.sort.linkedlist.java;

import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;

public class SortLinkedListOfStudentsUsingCollectionsSortMethod {

	public static void main(String[] args) {

		// 1. create LinkedList
		List<Student> students = new LinkedList<>();


		// 1.1 add Students to LL
		students.add(new Student(2063, "Pravin", 35));
		students.add(new Student(2097, "Shweta", 32));
		students.add(new Student(2019, "Sachin", 28));
		students.add(new Student(2023, "Kalpana", 27));
		students.add(new Student(2045, "Rajdeepan", 31));
		students.add(new Student(2073, "Sneha", 24));


		// 1.2 original LinkedList in insertion order
		System.out.println("1. Original LinkedList "
				+ "as per insertion-order :- \n");


		// 1.3 Iterating using enhanced for-loop
		for(Student student : students){
			System.out.println(student);
		}


		// 2. Collections.sort() - increasing-order of Age
		Collections.sort(students);


		// 2.1 print to console
		System.out.println("\n2. Sorted Student LinkedList -"
				+ " according to Age :- \n");


		// 2.2 Iterating using enhanced for-loop
		for(Student student : students){
			System.out.println(student);
		}


		// 3. Collections.sort() - decreasing-order of Age
		Collections.sort(students, new Comparator<Student>() {

			@Override
			public int compare(Student stud1, Student stud2) {
				return stud2.getAge() - stud1.getAge();
			}
		});


		// 3.1 print to console
		System.out.println("\n3. Reverse sorted Student LinkedList -"
				+ " according to Age :- \n");


		// 3.2 Iterating using enhanced for-loop
		for(Student student : students){
			System.out.println(student);
		}
	}
}

Ausgabe:

1. Original LinkedList as per insertion-order :- 

Student [id=2063, name=Pravin, age=35]
Student [id=2097, name=Shweta, age=32]
Student [id=2019, name=Sachin, age=28]
Student [id=2023, name=Kalpana, age=27]
Student [id=2045, name=Rajdeepan, age=31]
Student [id=2073, name=Sneha, age=24]

2. Sorted Student LinkedList - according to Age :- 

Student [id=2073, name=Sneha, age=24]
Student [id=2023, name=Kalpana, age=27]
Student [id=2019, name=Sachin, age=28]
Student [id=2045, name=Rajdeepan, age=31]
Student [id=2097, name=Shweta, age=32]
Student [id=2063, name=Pravin, age=35]

3. Reverse sorted Student LinkedList - according to Age :- 

Student [id=2063, name=Pravin, age=35]
Student [id=2097, name=Shweta, age=32]
Student [id=2045, name=Rajdeepan, age=31]
Student [id=2019, name=Sachin, age=28]
Student [id=2023, name=Kalpana, age=27]
Student [id=2073, name=Sneha, age=24]

3. Comparator-Schnittstelle &Collections.sort()-Methode

  • Vergleicht seine zwei Argumente zur Bestellung
  • Gibt ein Negativ zurück Ganzzahl, Null oder positiv ganze Zahl als erste Argument ist kleiner als , gleich , oder größer als die zweite Argument
  • Methodensignatur:- int Compare(T Objekt1, T Objekt2)

3.1 Sortieren der verknüpften Liste von Schülerobjekten

  • Eine verknüpfte Liste enthält Schülerobjekte mit Attributen wie ID, Name und ihr Alter in Einfügungsreihenfolge
  • Wir sortieren diese Schülerobjekte in natürlicher Reihenfolge nach ihrem Namen mit Collections.sort() Methode

Student.java

package net.bench.resources.sort.linkedlist.java;

public class Student {

	// member variables
	private int id;
	private String name;
	private int age;

	// 3-arg parameterized constructor

	// getters & setters

	// toString()
}

StudentComparator.java

package net.bench.resources.sort.linkedlist.java;

import java.util.Comparator;

public class StudentComparator implements Comparator<Student> {

	// name comparison in alphabetical order
	@Override
	public int compare(Student student1, Student student2) {
		return student1.getName().compareTo(student2.getName());
	}
}

SortLinkedListOfStudentsUsingComparator.java

package net.bench.resources.sort.linkedlist.java;

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class SortLinkedListOfStudentsUsingComparator {

	public static void main(String[] args) {

		// 1. create LinkedList
		List<Student> students = new LinkedList<>();


		// 1.1 add Students to LL
		students.add(new Student(2063, "Pravin", 35));
		students.add(new Student(2097, "Abhijeet", 32));
		students.add(new Student(2019, "Sachin", 28));
		students.add(new Student(2023, "Kalpana", 27));
		students.add(new Student(2045, "Rajdeepan", 31));
		students.add(new Student(2073, "Nikita", 24));


		// 1.2 original LinkedList in insertion order
		System.out.println("1. Original LinkedList "
				+ "as per insertion-order :- \n");


		// 1.3 Iterating using enhanced for-loop
		for(Student student : students){
			System.out.println(student);
		}


		// 2. Collections.sort() - alphabetical order of Name
		Collections.sort(students, new StudentComparator());


		// 2.1 print to console
		System.out.println("\n2. Sorted Student LinkedList -"
				+ " according to Name :- \n");


		// 2.2 Iterating using enhanced for-loop
		for(Student student : students){
			System.out.println(student);
		}


		// 3. Collections.sort() - reverse alphabetical order of Name
		Collections.sort(students, (new StudentComparator()).reversed());


		// 3.1 print to console
		System.out.println("\n3. Reverse sorted Student LinkedList -"
				+ " according to Name :- \n");


		// 3.2 Iterating using enhanced for-loop
		for(Student student : students){
			System.out.println(student);
		}
	}
}

Ausgabe:

1. Original LinkedList as per insertion-order :- 

Student [id=2063, name=Pravin, age=35]
Student [id=2097, name=Abhijeet, age=32]
Student [id=2019, name=Sachin, age=28]
Student [id=2023, name=Kalpana, age=27]
Student [id=2045, name=Rajdeepan, age=31]
Student [id=2073, name=Nikita, age=24]

2. Sorted Student LinkedList - according to Name :- 

Student [id=2097, name=Abhijeet, age=32]
Student [id=2023, name=Kalpana, age=27]
Student [id=2073, name=Nikita, age=24]
Student [id=2063, name=Pravin, age=35]
Student [id=2045, name=Rajdeepan, age=31]
Student [id=2019, name=Sachin, age=28]

3. Reverse sorted Student LinkedList - according to Name :- 

Student [id=2019, name=Sachin, age=28]
Student [id=2045, name=Rajdeepan, age=31]
Student [id=2063, name=Pravin, age=35]
Student [id=2073, name=Nikita, age=24]
Student [id=2023, name=Kalpana, age=27]
Student [id=2097, name=Abhijeet, age=32]


Java-Tag