Arrays 排序
正常来说 Arrays可以用于数组排序, 但如果数组里面是引用类型地址就会报错,这时候,
就需要加个功能(实现接口/继承接口) Comparable接口来定引用类型对象的排序规则(以..属性值进行排序)

正常Arrays.sort( 数组对象)进行排序时 , 会在排序的时候将数组对象进行调用comparato方法( Student o),两两冒泡比较
返回值1 : 告诉sort排序 左边大于右边,放后面,
返回值-1: 告诉sort排序 左边小于右边不用动
返回值0 : 告诉sort排序左边与右边相等,没事
1. 基本数据类型排序
Student[] students = new Student[4];
students[0] = new Student("蜘蛛精","169.5",23);
students[1] = new Student("至尊宝","198.5",35);
students[2] = new Student("紫霞精","162.5",16);
students[3] = new Student("猪八戒","173.5",19);
Arrays.sort(students); //原本用sort看student有没有排序规则,没有报错,
//有的化,就按照指定规则排序( 排序谁,谁实现接口comparable的comparto方法自定义排序)
System.out.println(Arrays.toString(students));//报错,不能对数组里的数组进行排序,不知道按照什么规则
2.以对象的属性进行排序
默认正向排序 ,若想反向排序 return -(this.age-o.age); 或 return (o.age - this.age)
package Arrays_sort_comparable;
public class Student implements Comparable <Student> {
// 目的,对数组的Arrays.sort 的排序进行按照指定元素排序 ,实现comparable接口
private String name;
private String height;
private int age;
public Student() {
}
public Student(String name, String height, int age) {
this.name = name;
this.height = height;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getHeight() {
return height;
}
public void setHeight(String height) {
this.height = height;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public int compareTo(Student o) {
//约定1 : 认为左边对象 大于右边对象 ,请返回正整数
//这里height是字符串,需要转成double类型 使用Double.valueof("字符串")
/* if (Double.valueOf(this.height )> Double.valueOf(o.height)){
return 1; //不换位置
}*/
// return this.age - o.age; //升序 最简单
if (this.age > o.age){
return 1; //不换位置
}
//约定2 : 认为左边对象 小于右边对象 ,请返回负整数
else if (this.age < o.age){
return -1; //交换位置
}
//约定3 : 认为左边对象 等于右边对象 ,请返回0
return 0;//保持不变,索引进入下一个
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", height='" + height + '\'' +
", age=" + age +
'}';
}
}
3. 忽略大小写首字符排序
public static void main(String[] args) {
String []names = {"body","anager", "Lambda","jack"};
// 对字符串进行排序,忽略首字符大小写进行排序
Arrays.sort(names, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
//
return o1.compareToIgnoreCase(o2); //忽略首字符大小写进行排序
}
});
System.out.println(Arrays.toString(names));
}
当你的才华配不上你的野心,努力的时候到了!

浙公网安备 33010602011771号