集合比较器
使一个类具备比较的能力需要器实现使其具有比较能力的接口即:
- Comparable 使继承该接口的类具有比较能力
- Comparator 单独定义一个比较器继承该接口,通常匿名内部类形式的比较器
并且重写接口的方法
Comparable接口
package testCompartor;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
//建立一个集合 Stu类型的 有属性id,name, age
//将集合中的元素按照age进行排序
public class TestComparable{
public static void main(String[] args) {
List<Stu> list = new ArrayList<Stu> ();
list.add(new Stu(1,"zs",29));
list.add(new Stu(2,"ww",30));
list.add(new Stu(3,"ls",31));
Collections.sort(list);
System.out.println(list);
}
}
class Stu implements Comparable<Stu>{
private int id;
private String name;
private int age;
public Stu() {
super();
}
public Stu(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Stu [id=" + id + ", name=" + name + ", age=" + age + "]";
}
//重写接口的方法
@Override
public int compareTo(Stu o) {
//拿新的对象与几何中的已有对象分别比较
return this.age-o.age;//按年龄升序
//进来一个新的元素 放到集合中,分别从左到右比较集合中所有元素,当返回值>=0时,新的元素位置不变,当返回值<0时,位置交换,然后依次比较所有元素
}
}
Comparator
package testCompartor;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
//建立一个集合 Stu类型的 有属性id,name, age
//将集合中的元素按照age进行排序
public class TestComparator {
public static void main(String[] args) {
List<Stu> list = new ArrayList<Stu> ();
list.add(new Stu(1,"zs",29));
list.add(new Stu(2,"ww",30));
list.add(new Stu(3,"ls",31));
//传入自定义的比较器
Collections.sort(list,new MyComparator());
//通常会使用匿名内部类
//Collections.sort(list,new Comparator<Stu>() {
//@Override
//public int compare(Stu o1, Stu o2) {
//return o1.getAge()-o2.getAge();
//}
//});
System.out.println(list);
}
}
class Stu{
private int id;
private String name;
private int age;
public Stu() {
super();
}
public Stu(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Stu [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
//自定义比较器类
class MyComparator implements Comparator<Stu>{
@Override
public int compare(Stu o1, Stu o2) {
return o1.getAge()-o2.getAge();//按年龄升序,返回的是位置关系
//如果比较的参数不是整数,例如double类型的,name需要判断比较结果
//double tmp = o1.getAge()-o2.getAge();
//if(tmp>0){
//return1;
//}else if(tmp=0){
//return 0;
//}else{
//return -1;
//}
}
}