Maison > Java > javaDidacticiel > Tri de table linéaire Java

Tri de table linéaire Java

黄舟
Libérer: 2017-02-22 10:01:45
original
1795 Les gens l'ont consulté

Tri des tableaux linéaires en Java

Préface : Alors que je travaillais sur JDBC tout à l'heure, j'ai soudain senti que le tri était trop utilisé et ennuyeux. Mon sixième sens m'a dit que Java avait un. façon de trier les tableaux linéaires, puis cliquez sur "." dans Eclipse, il existe une telle méthode statique public static void sort(List list, Comparator c).

Enregistrement de modification : Ajout d'une autre méthode selon la suggestion de @mythabc.


Méthode 1 : Comparateur

Avantages : Cette méthode est plus flexible lors de l'exécution. Si vous souhaitez modifier les règles de tri, la comparaison d'origine ne le sera pas. modifié. Comparator, et créez directement un autre comparateur, changez simplement le nouveau nom de classe du comparateur sur le client. Ceci est plus proche du principe d'ouverture et de fermeture. Lorsque plusieurs comparateurs sont accumulés, diverses règles de tri peuvent être converties à volonté, ce qui est le cas. plutôt cool ; la séparation du modèle et du tri est plus proche du principe de responsabilité unique.

1. Définissez d'abord un modèle :

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;
    }
}
Copier après la connexion





2. util.Comparator, écrivez des règles de comparaison dans la méthode compare() :

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;
    }
}
Copier après la connexion





3. Utilisez Java lors du tri. méthode sort(List list, Comparator c) dans 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());
        }
    }
}
Copier après la connexion


4. Résultat d'exécution :

A 14
A 15
B 14
Copier après la connexion
Copier après la connexion


Méthode 2 : Implémenter l'interface Comparable

Avantages : Attachez directement des attributs triables au modèle sans avoir à définir une nouvelle classe (pas besoin de définir un comparateur), réduisant ainsi le nombre de catégories facilite la gestion et la lecture.

1. Définissez d'abord un modèle, implémentez l'interface Comparable et écrivez des règles de comparaison dans la méthode 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;
    }
}
Copier après la connexion


2. tri Utilisez la méthode sort(List list) dans 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());
        }
    }
}
Copier après la connexion


3. Résultats en cours d'exécution :

A 14
A 15
B 14
Copier après la connexion
Copier après la connexion

Ce qui précède est le contenu du tri des tableaux linéaires Java. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal