Heim > Java > javaLernprogramm > Hauptteil

Sortierung linearer Java-Tabellen

黄舟
Freigeben: 2017-02-22 10:01:45
Original
1733 Leute haben es durchsucht

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 list, Comparator

Ä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;
    }
}
Nach dem Login kopieren




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;
    }
}
Nach dem Login kopieren




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());
        }
    }
}
Nach dem Login kopieren

4. Laufergebnis:


A 14
A 15
B 14
Nach dem Login kopieren
Nach dem Login kopieren


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;
    }
}
Nach dem Login kopieren

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());
        }
    }
}
Nach dem Login kopieren

3. Laufende Ergebnisse:

A 14
A 15
B 14
Nach dem Login kopieren
Nach dem Login kopieren

Das Obige ist der Inhalt der linearen Java-Tabellensortierung. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!