Home > Java > javaTutorial > body text

Java linear table sorting

黄舟
Release: 2017-02-22 10:01:45
Original
1750 people have browsed it

Java linear table sorting

Foreword: When I was working on JDBC just now, I suddenly felt that order-by was used too much and was not new. My sixth sense told me that Java has a way to sort linear tables. Encapsulate, and then click "." in eclipse. Haha, there is such a static method public static void sort(List list, Comparator c).

Modify the record: According to @mythabc's suggestion, another way has been added.


Method 1: Comparator

Benefits: This method is more flexible when running. If you want to change the sorting rules, the original comparison will not be changed. Comparator, and directly create another comparator, just change the new class name of the comparator on the client. This is closer to the opening and closing principle. When multiple comparators are accumulated, various sorting rules can be converted at will, which is quite cool. ; the separation of model and sorting is closer to the single responsibility principle.

1. First define a model:

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;
    }
}
Copy after login




##2. Then define a comparator and implement java.util .Comparator interface, write comparison rules in the compare() method:


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;
    }
}
Copy after login




3. Use java.util.Collections when sorting The sort(List list, Comparator c) method:


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

4. Running result:


A 14
A 15
B 14
Copy after login
Copy after login


Method 2: Implement the Comparable interface
Benefits: Directly attach sortable attributes to the model without having to define new classes (no need to define comparators), reducing the number of classes and making it easier to manage and read It's easier when you're there.

1. First define a model, implement the Comparable interface, and write comparison rules in the compareTo() method:


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;
    }
}
Copy after login

2. Use java when sorting The sort(List list) method in .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());
        }
    }
}
Copy after login

3. Running result:

A 14
A 15
B 14
Copy after login
Copy after login
           

The above is the content of Java linear table sorting. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template