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));  
  
}
posted @ 2025-01-20 00:16  加油酱  阅读(21)  评论(0)    收藏  举报