Sortieren linearer Tabellen in Java
Vorwort: Als ich gerade an JDBC arbeitete, hatte ich plötzlich das Gefühl, dass Order-By zu oft verwendet wurde und langweilig war. Mein sechster Sinn sagte mir, dass Java eine hat Möglichkeit, lineare Tabellen zu sortieren und dann auf „.“ zu klicken. Haha, es gibt eine solche statische Methode, public static
Änderungsdatensatz: Gemäß dem Vorschlag von @mythabc auf andere Weise hinzugefügt.
Methode 1: Komparator
Vorteile: Diese Methode ist beim Ausführen flexibler. Wenn Sie die Sortierregeln ändern möchten, wird der ursprüngliche Vergleich nicht geändert Wenn Sie den Komparator ändern und direkt einen anderen Komparator erstellen, ändern Sie einfach den neuen Klassennamen des Komparators. Wenn mehrere Komparatoren akkumuliert werden, können verschiedene Sortierregeln nach Belieben konvertiert werden ziemlich cool; die Trennung von Modell und Sortierung kommt dem Prinzip der Einzelverantwortung näher.
1. Definieren Sie zuerst ein Modell:
package model; /** * User.java * * @author 梁WP 2014年3月3日 */ public class User { private String userName; private int userAge; public User() { } public User(String userName, int userAge) { this.userName = userName; this.userAge = userAge; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } }
2. Definieren Sie dann einen Komparator und implementieren Sie Java. util.Comparator-Schnittstelle, Vergleichsregeln in der Methode Compare() schreiben:
package util; import java.util.Comparator; import model.User; /** * ComparatorUser.java * * @author 梁WP 2014年3月3日 */ public class ComparatorUser implements Comparator<User> { @Override public int compare(User arg0, User arg1) { // 先比较名字 int flag = arg0.getUserName().compareTo(arg1.getUserName()); // 如果名字一样,就比较年龄 if (flag == 0) { return arg0.getUserAge() - arg1.getUserAge(); } return flag; } }
3 sort(List list, Comparator c)-Methode in util.Collections:
package test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import util.ComparatorUser; import model.User; /** * TestApp.java * * @author 梁WP 2014年3月3日 */ public class TestApp { public static void main(String[] arg0) { List<User> userList = new ArrayList<User>(); // 插入数据 userList.add(new User("A", 15)); userList.add(new User("B", 14)); userList.add(new User("A", 14)); // 排序 Collections.sort(userList, new ComparatorUser()); // 打印结果 for (User u : userList) { System.out.println(u.getUserName() + " " + u.getUserAge()); } } }
4. Laufergebnis:
A 14 A 15 B 14
Methode 2: Implementieren Sie die Comparable-Schnittstelle
Vorteile: Hängen Sie sortierbare Attribute direkt an das Modell an, ohne eine neue Klasse definieren zu müssen (es ist nicht erforderlich, einen Komparator zu definieren), wodurch reduziert wird Die Anzahl der Kategorien erleichtert die Verwaltung und erleichtert die Lesbarkeit.
1. Definieren Sie zunächst ein Modell, implementieren Sie die Comparable-Schnittstelle und schreiben Sie Vergleichsregeln in die Methode „compareTo()“:
package model; /** * Student.java * * @author 梁WP 2014年3月4日 */ public class Student implements Comparable<Student> { private String studentName; private int studentAge; public Student() { } public Student(String studentName, int studentAge) { this.studentName = studentName; this.studentAge = studentAge; } public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public int getStudentAge() { return studentAge; } public void setStudentAge(int studentAge) { this.studentAge = studentAge; } @Override public int compareTo(Student o) { // 先比较名字 int flag = this.getStudentName().compareTo(o.getStudentName()); // 如果名字一样,就比较年龄 if (flag == 0) { return this.getStudentAge() - o.getStudentAge(); } return flag; } }
2 Sortieren Verwenden Sie die Methode sort(List list) in java.util.Collections:
package test; import java.util.ArrayList; import java.util.Collections; import java.util.List; import model.Student; /** * TestApp.java * * @author 梁WP 2014年3月4日 */ public class TestApp2 { public static void main(String[] arg0) { List<Student> studentList = new ArrayList<Student>(); // 插入数据 studentList.add(new Student("A", 15)); studentList.add(new Student("B", 14)); studentList.add(new Student("A", 14)); // 排序 Collections.sort(studentList); // 打印结果 for (Student s : studentList) { System.out.println(s.getStudentName() + " " + s.getStudentAge()); } } }
3. Laufende Ergebnisse:
A 14 A 15 B 14