ホームページ  >  記事  >  Java  >  Java 線形テーブルのソート

Java 線形テーブルのソート

黄舟
黄舟オリジナル
2017-02-22 10:01:451697ブラウズ

Java 線形テーブル ソート

まえがき: 先ほど JDBC に取り組んでいたとき、突然、order-by が多用され、新しいものではないと感じたのです。Java には線形テーブル ソート用のパッケージがあることを第六感で知りました。それからEclipseでは、何気なく「.」をクリックしました、笑、そのような静的メソッド public static 8742468051c85b06f0a0af9e3e506b5c void sort(List8742468051c85b06f0a0af9e3e506b5c list, Comparator117c5a0bdb71ea9a9d0c2b99b03abe3e c) があります。

修正記録: @mythabc さんの提案に従って別の方法を追加しました。


方法 1: コンパレーター

利点: この方法は、実行時により柔軟です。並べ替えルールを変更したい場合は、元のコンパレーターを変更せずに、別のコンパレーターを直接作成してクライアント上で変更します。コンパレータの新しいクラス名は、オープンとクローズの原理に近く、複数のコンパレータが蓄積されると、さまざまなソート ルールを自由に切り替えることができ、モデルとソートが分離されます。単一責任の原則。

1. まずモデルを定義します:

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. 次にコンパレーターを定義し、java.util.Comparator インターフェースを実装し、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;
    }
}




3. 並べ替える場合、java.util.Collections の sort(List list, Comparator c) メソッドを使用します:


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. 実行結果:


A 14
A 15
B 14


比較可能なインターフェイス
利点: 新しいクラスを定義する必要がなく (コンパレーターを定義する必要がなく)、並べ替え可能な属性をモデルに直接アタッチできるため、クラスの数が減り、管理が容易になり、読みやすくなります。

1. まずモデルを定義し、Comparable インターフェースを実装し、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;
    }
}
E 运 3. 実行結果:

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());
        }
    }
}



上記は Java 線形テーブルのソートの内容です。その他の関連コンテンツについては、PHP 中国語ネットワーク (www.php.cn) に注目してください。



-->

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。