Java怎么对复杂的数据类型排序和比大小

这篇具有很好参考价值的文章主要介绍了Java怎么对复杂的数据类型排序和比大小。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java怎么对复杂的数据类型排序和比大小,Java_SE,java,开发语言,经验分享

目录

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

Comparable接口

compareTo方法 

二.对复杂数据类型排序

三.总结


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

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

class Student {
    public String name;
    public int age;
    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怎么对复杂的数据类型排序和比大小,Java_SE,java,开发语言,经验分享

Comparable接口

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

compareTo方法 

Java怎么对复杂的数据类型排序和比大小,Java_SE,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);
      
    }
}

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

Java怎么对复杂的数据类型排序和比大小,Java_SE,java,开发语言,经验分享

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

Java怎么对复杂的数据类型排序和比大小,Java_SE,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 student3 = new Student("王五",25);
        students[0] = student1;
        students[1] = student2;
        students[2] = student3;
        
        mySort(students);
        System.out.println(Arrays.toString(students));
       
    }
}

三.总结

当我们需要对复杂的数据类型进行排序或者比大小的时候,我们就可以使用Comparable接口,然后重写其中的compareTo方法,然后就可以直接使用compareTo方法进行排序了,又或者是通过其他方法来调用compareTo方法来对复杂类型的数组进行排序文章来源地址https://www.toymoban.com/news/detail-759144.html

到了这里,关于Java怎么对复杂的数据类型排序和比大小的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【python基础】复杂数据类型-列表类型(列表切片)

    视频讲解 前面学习的是如何处理列表的 所有数据元素 。Python还可以处理列表的部分元素,Python称之为切片。 创建切片,可指定要使用的第一个数据元素的索引和最后一个数据元素的索引。与range函数一样,Python在到达指定的第二个索引 前面的 数据元素后停止。比如要切片

    2024年02月07日
    浏览(40)
  • 【python基础】复杂数据类型-列表类型(增删改查)

    视频讲解 列表数据类型-增删改查 列表是由一系列数据元素按特定顺序排列组成的 。可以将 任何类型数据元素 加入列表中,其中的数据元素之间没有任何关系。鉴于列表通常包含多个数据元素,给列表变量指定一个表示复数的名称是个不错的选择。 在Python中, 用方括号[

    2024年02月07日
    浏览(46)
  • java中各种类型所占内存空间大小

    java中常用类型所占内存大小,以下值以实测为准。 类型 数量 大小 备注 byte 1 1B byte 1024 1KB int 1 4B int 1024 4KB boolean 1 1B boolean 1024 1KB double 1 8B double 1024 8KB long 1 8B long 1024 8KB float 1 4B float 1024 4KB char 2 2B char 1024 2KB Object 1 4B 对象内存地址 Object 1024 4KB Object 1 16B 对象头 String 1 2B 在j

    2024年02月13日
    浏览(31)
  • 【python基础】复杂数据类型-字典(嵌套)

    有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为 嵌套 。我们可以在列表中嵌套字典、在字典中嵌套列表、在字典中嵌套字典。 我们可以把一个人的信息放在字典中,但是多个人的信息我们无法放在同一个字典中,所以就需要字典列表。 其语

    2024年02月08日
    浏览(30)
  • 【python基础】复杂数据类型-字典(遍历)

    一个字典可能只包含几个键值对,也可能包含数百万个键值对,所以Python支持字典遍历。字典可用于以各种方式存储信息,因此有多种遍历字典的方式:可遍历字典的所有键值对、键或值。 其语法格式: 比如遍历一个人的信息,编写程序如下所示: 这里,我们给键起了一个

    2024年02月08日
    浏览(39)
  • Js基础-复杂数据类型之数组

    数组,就是一组相关的值存储在一块连续的空间内 一般的高级编程语言都有数组这种数据结构 数组有三种定义方式,如下 使用中括号直接定义数组 使用 new Array() 方法 传入数组元素 使用 new Array() 方法,传入长度, 这种不能赋值,只能指定长度 JS 的数组中的数据可以不是同

    2024年02月09日
    浏览(37)
  • 数据结构和常用排序算法复杂度

    插入操作时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数n/2 删除操作时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数(n-1)/2 按值查找时间复杂度 最好O(1),最坏O(n),平均O(n) 移动结点的平均次数(n+1)/2 头插法O(n) 尾插法O(n) 按序查找O(n) 按值查找O(n) 插入

    2024年02月11日
    浏览(32)
  • 【数据结构】计数排序 & 排序系列所有源代码 & 复杂度分析(终章)

    目录 一,计数排序 1,基本思想 2,思路实现 3,计数排序的特性总结: 二,排序算法复杂度及稳定性分析 三,排序系列所有源代码 Sort.h Sort.c Stack.h Stack.c 计数排序也叫非比较排序; 1,基本思想 计数排序又称为 鸽巢原理 ,是对 哈希直接定址法 的变形应用 操作步骤 : 1

    2024年02月08日
    浏览(32)
  • 前端 js 栈内存和堆内存 基本数据类型和复杂数据类型的区别?

    先了解一下JavaScript 数据类型有哪些? javaScript 中有8种基本的数据类型:7种为基本数据类型,而Object 为复杂数据类型 基本数据类型(原始数据类型): number 用于任何类型的数字 bigint 用于任意长度的整数。 string 用于字符串 boolean :布尔值 用于 true 和 false。 null 用于未知的

    2024年02月11日
    浏览(38)
  • 【数据结构初阶】八大排序算法+时空复杂度

    学会控制自己是人生的必修课 1.直接插入排序思想: 假设现在已经有一个有序序列,如果有一个数字插入到这段序列的末尾,我们会选择拿这个数和它前面的每个数字都比较一遍,如果前面的数字比他大,那我们就让前面的数字赋值到这个被插入的数字位置,依次与前面的数

    2024年02月01日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包