按类中的某个属性对类数组排序,尽量用JDK的类实现

解决方案 »

  1.   

    google一下Comparator,找个例子,应该不难
      

  2.   


    package com.keeya.Test;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;public class Test {
    public static void main(String[] args) {
    List<Employee> employees = new ArrayList<Employee>(); employees.add(new Employee("Andy", 21, 2000));
    employees.add(new Employee("Felix", 21, 3000));
    employees.add(new Employee("Bill", 35, 20000));
    employees.add(new Employee("Helen", 21, 10000));
    employees.add(new Employee("Cindy", 28, 8000));
    employees.add(new Employee("Douglas", 25, 5000)); // 按名称排序
    Collections.sort(employees, new NameComparator());
    display(employees); // 按年龄排序
    Collections.sort(employees, new AgeComparator());
    display(employees); // 按薪水排序
    Collections.sort(employees, new SalaryComparator());
    display(employees);
    } public static void display(List<Employee> employees) {
    for (Employee e : employees) {
    System.out.println("雇员名=" + e.getName() + " 年龄=" + e.age + " 薪水="
    + e.getSalary());
    }
    System.out.println();
    }
    }class Employee {
    protected String name; protected int age; protected int salary; public Employee(String name, int age, int salary) {
    this.name = name;
    this.age = age;
    this.salary = salary;
    } public int getAge() {
    return age;
    } public void setAge(int age) {
    this.age = age;
    } public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    } public int getSalary() {
    return salary;
    } public void setSalary(int salary) {
    this.salary = salary;
    }
    }class AgeComparator implements Comparator {
    public int compare(Object op1, Object op2) {
    Employee eOp1 = (Employee) op1;
    Employee eOp2 = (Employee) op2; // 按年龄排序
    return eOp1.getAge() - (eOp2.getAge());
    }
    }class NameComparator implements Comparator {
    public int compare(Object op1, Object op2) {
    Employee eOp1 = (Employee) op1;
    Employee eOp2 = (Employee) op2; // 按姓名排序
    return eOp1.getName().compareTo(eOp2.getName());
    }
    }class SalaryComparator implements Comparator {
    public int compare(Object op1, Object op2) {
    Employee eOp1 = (Employee) op1;
    Employee eOp2 = (Employee) op2; // 按薪水排序
    return eOp1.getSalary() - (eOp2.getSalary());
    }
    }测试结果:
    雇员名=Andy 年龄=21 薪水=2000
    雇员名=Bill 年龄=35 薪水=20000
    雇员名=Cindy 年龄=28 薪水=8000
    雇员名=Douglas 年龄=25 薪水=5000
    雇员名=Felix 年龄=21 薪水=3000
    雇员名=Helen 年龄=21 薪水=10000雇员名=Andy 年龄=21 薪水=2000
    雇员名=Felix 年龄=21 薪水=3000
    雇员名=Helen 年龄=21 薪水=10000
    雇员名=Douglas 年龄=25 薪水=5000
    雇员名=Cindy 年龄=28 薪水=8000
    雇员名=Bill 年龄=35 薪水=20000雇员名=Andy 年龄=21 薪水=2000
    雇员名=Felix 年龄=21 薪水=3000
    雇员名=Douglas 年龄=25 薪水=5000
    雇员名=Cindy 年龄=28 薪水=8000
    雇员名=Helen 年龄=21 薪水=10000
    雇员名=Bill 年龄=35 薪水=20000
      

  3.   

    如4楼所写,实现Comparator接口得到不同的比较器。不过他用的是集合,如果楼主想要数组的话,也一样,只是排序是调用Arrays类的sort方法,其他的基本一样
      

  4.   

    4楼,写的很详细也可以使用TreeSet排序