开发者

使用Java如何对复杂的数据类型排序和比大小

目录
  • 一.对复杂的数据类型比大小
    • Comparable接口
      • compareTo方法 
  • 二.对复杂数据类型排序
    • 三.总结

      一.对复杂的数据类型比大小

      假如我们现在有个学生类,并且我们实例化出了俩个学生对象,他们各自有各自的名字和年龄属性,我们如何对他们进行比大小操作呢?

      class Student {
          public String name;
          public int agjavascripte;
          public Student(String name, int age) {
              this.name = name;
              this.age = age;
          }
      }
       
      public class Test{
          public static void main(String[] args) {
              Student student1 = new Student("张三",20);
              Student student2 = new Student("李四",23);   
              if (student1 > student2) {
                  System.out.println("student1 > student2");
              }else {
                  System.out.println("student1 < student2");
              }
          }
      }

      我们可以看见编译器的报错提示,这是因为Java提供的运算符号只能识别操作简单的数据类型,对于我们自定义的Student类是无法识别的

      使用Java如何对复杂的数据类型排序和比大小

      Comparable接口

      在这种情况下,我们就可以使用我们之前的讲解的接口的知识,我们可以调用Comparable接口,然后重写其中的compareTo方法,在使用接口的时候需要注意声明你需要比较的类型,也就是接口后尖括号内的内容

      compareTo方法 

      使用Java如何对复杂的数据类型排序和比大小

      我们在这里对接口中的compareTo方法进行重写后,在main方法中进行调用 

      class Student implements Comparable <Student> {
          public String name;
          public int age;
          public Student(String name, int age) {
              this.name = name;
              this.age = age;
          }
          @Override
          public int compareTo(Student o) {
              return this.name.compareTo(o.name);
          }
      }
       
      public class Test{
       
          public static void main(String[] args) {
              Student student1 = new Student("张三",20);
              Student student2 = new Student("李四",23);
       
              if (student1.compareTo(student2) > 0) {
                  System.out.println("student1 > student2");
              }else {
                  System.out.println("student1 <= student2");
              }
          }
      }

      我们也可以根据年龄进行比大小,只需要重新重写这个方法就可以了

          @Override
          public int compareTo(Student o) {
              return this.age-o.age;
          }

      二.对复杂数据类型排序

      假如我们现在有一个学生类数组,我们使用Arrays.sort对他进行排序

      public class Test{
       
          public static void main(String[] args) {
              Student[] students = new Student[3];
              Student student1 = new Student("张三",20);
              Student student2 = new Student("李四",23);
              Student student3 = new Student("王五",25);
              students[0] = student1;
              students[1] = student2;
              students[2] = student3;
              
              Arrays.sort(students);
            
          }
      }

      我们会发现报错信息如下,原因就是对于这种复杂的数据类型,如果我们要让编译器来排序,那我们就需要给他排序规则,很显然这里编译器是没有android读取到任何的排序规则的

      使用Java如何对复杂的数据类型排序和比大小

      我们点击错误信息,打开源码观察会发现,编译器这里还是用到了Comparable接口

      使用Java如何对复杂的数据类型排序和比大小

      那我们还是像刚才一样调用Comparable接口,然后我们给出明确的排序规则,再写一个排序方法,就可以正常对复杂数据排序了编程

      import java.util.Arrays;
       
      class Student implements Comparable <Student> {
          public String name;
          public int age;
          public Student(String name, int age) {
              this.name = name;
              this.age = age;
          }
      //    @Override
      //    public int compareTo(Student o) {
      //        return this.name.compareTo(o.name);
      //    }
          @Override
          public int compareTo(Student o) {
              return this.age-o.age;
          }
          
          @Override
          public String toString() {
              return "Student{" +
                      "name='" + name + '\'' +
                      ", age=" + age +
                      '}';
          }
       
          public static void mySort(Comparable[] comparables) {
       
              for (int i = 0; i < comparables.length-1; i++) {
                  for (int j = 0; j < comparables.length-1-i; j++) {
                      //if(comparables[j] > comparables[j+1]) {
                      if(comparables[j].compareTo(comparables[j+1]) > 0) {
                          //交换
            编程客栈              Comparable tmp = comparables[j];
                          comparables[j] = comparables[j+1];
                          comparables[j+1] = tmp;
                      }
                  }
              }
          }
      }
       
      public class Test{
       
          public static void main(String[] args) {
              Student[] students = new Student[3];
              Student student1 = new Student("张三",20);
              Student student2 = new Student("李四",23);
              Student studenandroidt3 = new Student("王五",25);
              students[0] = student1;
              students[1] = student2;
              students[2] = student3;
              
              mySort(students);
              System.out.println(Arrays.toString(students));
             
          }
      }

      三.总结

      当我们需要对复杂的数据类型进行排序或者比大小的时候,我们就可以使用Comparable接口,然后重写其中的compareTo方法,然后就可以直接使用compareTo方法进行排序了,又或者是通过其他方法来调用compareTo方法来对复杂类型的数组进行排序

      到此这篇关于使用Java如何对复杂的数据类型排序和比大小的文章就介绍到这了,更多相关Java数据类型排序和比大小内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜