Comparator接口
compare排序方法
public static void main(String[] args) {
/**
* 数组排序
*/
Integer[]itg = new Integer[]{11,455,578,666};
Arrays.sort(itg, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return Integer.compare(o1,o2);
}
});
Arrays.stream(itg).forEach(integer -> System.out.println("-----" + integer));
/**
* list集合排序
*/
List<String> list = Arrays.asList("asa","ab","asssa","aaff");
Collections.sort(list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(),o2.length());
}
});
list.stream().forEach(s -> System.out.println(s));
/**
* list集合排序
*/
List<String> listTo = Arrays.asList("b","a","aa","bb");
Collections.sort(listTo, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
listTo.stream().forEach(s -> System.out.println(s));
}
输出
compare Integer.compare(o1,o2) o1 > o2 返回 1;o1 = o2 返回 0;o1 < o2 返回-1
compareTo 同 compare 方法的参数比较一样 返回1,0,-1
比较方法:
(1) 字符串与对象进行比较
(2) 按字典顺序比较两个字符串
比较过程:
先比较对应字符的大小(ASCII码顺序),如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至得到最终结果或者其中一个参数结束。
public class test {
static class Student implements Comparable<Student>{
private String name;
private int age;
private float score;
public Student(String name, int age, float score) {
this.name = name;
this.age = age;
this.score = score;
}
public String toString()
{
return name+"\t\t"+age+"\t\t"+score;
}
@Override
public int compareTo(Student o) {
// TODO Auto-generated method stub
if(this.score>o.score)//score是private的,为什么能够直接调用,这是因为在Student类内部
return -1;//由高到底排序
else if(this.score<o.score)
return 1;
else{
if(this.age>o.age)
return 1;//由底到高排序
else if(this.age<o.age)
return -1;
else
return 0;
}
}
}
public static void main(String[] args) {
// 将学生先按成绩由大到小排名,成绩相同时候按照年龄由低到高排序。
Student stu[]={new test.Student("zhangsan",20,90.0f),
new test.Student("lisi",22,90.0f),
new test.Student("wangwu",20,99.0f),
new test.Student("sunliu",22,100.0f)};
java.util.Arrays.sort(stu);
for(Student s:stu){
System.out.println(s);
}
}
}