void sort(List<"/> void sort(List<">

 >  기사  >  Java  >  Java 선형 테이블 정렬

Java 선형 테이블 정렬

黄舟
黄舟원래의
2017-02-22 10:01:451696검색

Java에서 선형 테이블 정렬

서문: 방금 JDBC를 작업할 때 갑자기 order-by가 너무 많이 사용되고 지루하다는 느낌이 들었습니다. 선형 테이블을 정렬하는 방법. Eclipse에서 "."을 클릭합니다. 하하, 그런 정적 메소드가 있습니다. public static 8742468051c85b06f0a0af9e3e506b5c list, Comparator76168d61255e29e8963eab5bd473f4c3 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을 구현하는 비교기를 정의합니다. 비교기 인터페이스, 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를 사용합니다. (목록 목록, 비교기 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


방법 2: Comparable 인터페이스 구현

이점: 새 클래스를 정의할 필요 없이(비교기를 정의할 필요 없음) 정렬 가능한 속성을 모델에 직접 첨부하여 클래스 수를 줄이고 관리 및 관리를 더 쉽게 만듭니다. 읽기 당신이 거기에 있으면 더 쉽습니다.

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


2. sorting .util.Collections의 sort(List list) 메소드:

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. 실행 결과:

A 14
A 15
B 14

위의 내용입니다. Java 선형 테이블 정렬에 대한 자세한 내용은 PHP 중국어 웹사이트(www.php.cn)를 참고하세요!

Java 선형 테이블 정렬
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.