今天做了个关于对象排序的一个问题,用到了一些对象的排序,就简单的做了一些记录。具体的说法还需看Java的API
Comparator:是在java.util.Comparator包里面。一个排序的类实现的接口,要重写compare方法,其中compare方法中有两个参数。
Comparable: 是在java.lang.Comparable包里面。是一个对象类实现的接口,要重写compareTo的方法,其中compareTo方法中只有一个参数。
Collator:实在java.text.Collator包里面。Collator 类执行区分语言环境的 String 比较。使用此类可为自然语言文本构建搜索和排序例程。 Collator实现了Comparator接口。Collator是一个抽象类.
package com.an.compare;
import java.text.Collator;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Locale;
import org.junit.Test;
//对一个对象的进行排序(把所有的属性都排列一遍)
public class TestCompare {
//默认按年龄来排序来排序,对Employee实现了comparable接口,重写了compareTo接口
@Test
public void testCompare() {
Employee[] all = new Employee[3];
all[0] = new Employee("张三", 15000, 21);
all[1] = new Employee("李四", 16000, 22);
all[2] = new Employee("王五", 17000, 23);
Arrays.sort(all);
System.out.println(Arrays.toString(all));
//显示结果
//[[姓名:张三,年龄:21,薪资:15000.0], [姓名:李四,年龄:22,薪资:16000.0], [姓名:王五,年龄:23,薪资:17000.0]]
}
//按薪资来排序
@Test
public void testSalary(){
Employee[] all = new Employee[3];
all[0] = new Employee("张三", 15000, 21);
all[1] = new Employee("李四", 17000, 22);
all[2] = new Employee("王五", 16000, 23);
SalarySort salarySort = new SalarySort();
Arrays.sort(all,salarySort);
System.out.println(Arrays.toString(all));
//显示结果
//[[姓名:张三,年龄:21,薪资:15000.0], [姓名:王五,年龄:23,薪资:16000.0], [姓名:李四,年龄:22,薪资:17000.0]]
}
//按姓名排序
@Test
public void testName(){
Employee[] all = new Employee[3];
all[0] = new Employee("张三", 15000, 21);
all[1] = new Employee("安四", 17000, 22);
all[2] = new Employee("王五", 16000, 23);
NameSort nameSort = new NameSort();
Arrays.sort(all,nameSort);
System.out.println(Arrays.toString(all));
//显示结果
//[[姓名:安四,年龄:22,薪资:17000.0], [姓名:王五,年龄:23,薪资:16000.0], [姓名:张三,年龄:21,薪资:15000.0]]
}
}
//实现Comparator接口,对姓名进行排序
class NameSort implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Employee e1 = (Employee) o1;
Employee e2 = (Employee) o2;
//按照名字的汉语拼音顺序排列
//比较的是两个员工的name
String name1 = e1.getName();
String name2 = e2.getName();
//return name1.compareTo(name2);//自然排序:按照Unicode编码值得顺序排序
// Comparator c = Collator.getInstance();//获取平台默认的语言环境
// return c.compare(name1, name2);
Comparator c = Collator.getInstance(Locale.CHINA);
return c.compare(name1, name2);
}
}
class SalarySort implements Comparator{
@Override
public int compare(Object o1, Object o2) {
Employee e1 = (Employee) o1;
Employee e2 = (Employee) o2;
if(e1.getSalary() > e2.getSalary()){
return 1;
}else if(e1.getSalary() < e2.getSalary()){
return -1;
}
return 0;
}
}
//定义Employee对象,实现Comparable接口
class Employee implements Comparable{
private String name;
private double salary;
private int age;
public Employee(String name,double salary,int age) {
this.age = age;
this.salary = salary;
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "[姓名:"+name+",年龄:"+age+",薪资:"+salary+"]";
}
@Override
public int compareTo(Object o) {
Employee e = (Employee) o;
return this.age - e.getAge();
}
}