第7章-第5节-Java中的比较器comparator和泛型的简单说明

news2025/1/1 11:30:57

1、 引入

上个章节中我们在使用TreeSet保存自定义数据类型的时候,类必须要实现Comparable这个接口,然后重写CompareTo这个方法,这个必须是在具体的自定义类内部去写,有时不方便,每遇到一个都要在那个类内部去写这个CompareTo。

也就是某些时候存在这么个问题,我的排序规则不是固定的,而是根据用户的选择而定的。

那么,此时用户选一次就要重新去更改源码,很显然不合适。

在保存数据的时候,排序的条件动态的传入比较符合我们的场景,也更加的灵活。

2、 概述及特点

概述:comparator是一个接口,比较器,可以实现元素的排序规定定义。

特点:独立定义的比较器,在创建集合的时候,传入比较器对象,实现排序的规则。

3、 使用

1)、定义一个类,实现Comparator接口,重写compare方法

public class Student {
    private String name;
    private Integer age;

    public Student() {
    }

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
import java.util.Comparator;

public class MyComparator implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        return 0;
    }
}

2)、编写排序规则:

import java.util.Comparator;

public class MyComparator implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        int num = o1.getAge() - o2.getAge();
        if(num == 0){
            num = o1.getName().compareTo(o2.getName());
        }

        return num;
    }
}

3)、测试:

import java.util.Set;
import java.util.TreeSet;

public class Test {
    public static void main(String[] args) {
        // 在创建集合的时候,传入自定义的比较器对象
        Set<Student> set = new TreeSet<>(new MyComparator());
        set.add(new Student("zhangsan", 21));
        set.add(new Student("lisi", 19));
        set.add(new Student("wangwu", 18));
        set.add(new Student("wangba", 18));

        System.out.println(set);
    }
}

4)、comparator 与 comparable 比较

4、泛型:

1)、泛型是用来规定集合必须存储什么类型的数据。

2)、因为未加泛型前,我们集合的add方法参数是Object ,所以可以添加任何类型,但是在我们遍历的时候,就会不知道取出的类型到底什么类型,就算知道,也要进行强制类型转换,否则是用不了具体实体类的属性和方法

3)、写法:

 

//泛型 <Student> 规定此处list集合只能添加Student类型
List<Student> stus = new ArrayList<Student>();
stus.add(new Student("zhang san ",10));
stus.add(new Student("zhang san 2",10));
stus.add(new Student("zhang san 3",10));

for (Student stu:stus) { //可以直接写成Student
    //此处就不用再强制类型转换了!
    System.out.println(stu);
}

本电子书目录:《Java基础的重点知识点全集》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1364188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何把电脑中的项目快速传进Github中?

一、打开GitHub网站:https:github.com 登录自己的个人账号 1.新建一个项目 2.用鼠标直接拖拽电脑中的项目文件夹与文件到新创建的项目中点击保存即可。

Xfs文件系统磁盘布局

目录 一&#xff0c;CentOS下Xfs文件系统的安装 二&#xff0c;准备工作 三&#xff0c;AG结构 四&#xff0c;AG超级块 五&#xff0c;AG空闲磁盘空间管理 六&#xff0c;ABTB的Btree 七&#xff0c;ABTB/ABTC的节点块管理 八&#xff0c;inode节点管理 九&#xff0…

Redis 键中冒号的用途是什么?可以使匹配查询更快吗?

Redis 键中冒号的用途是什么在Redis中&#xff0c;冒号&#xff08;:&#xff09;用作键的分隔符&#xff0c;它的主要作用是创建层次结构和命名空间。通过在键中使用冒号&#xff0c;可以将键分为多个部分&#xff0c;从而更好地组织和管理数据。 以下是冒号在Redis键中的用途…

PyTorch|构建自己的卷积神经网络——卷积层

在构建我们的网络时&#xff0c;我们需要用到卷积层提取特征&#xff0c;来看到一些特别的东西&#xff0c;当图片经过卷积层&#xff0c;图片尺寸一般会变化。 当我们构建网络时&#xff0c;我们需要确定各个层的参数&#xff0c;而这些参数&#xff0c;则是要提前计算的&…

【Python常用函数】一文让你彻底掌握Python中的numpy.append函数

大数据时代的到来,使得很多工作都需要进行数据挖掘,从而发现更多有利的规律,或规避风险,或发现商业价值。而大数据分析的基础是学好编程语言。本文和你一起来探索Python中的append函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这个函数,让你在处…

【数据分享】2024年我国主要城市地铁站点和线路数据

地铁站点与线路数据是我们经常会用到的一种基础数据。去哪里获取该数据呢&#xff1f; 今天我们就给大家分享一份2024年1月采集的全国有地铁城市的地铁站点与线路数据&#xff0c;数据格式为shp&#xff0c;数据坐标为wgs1984地理坐标。数据中不仅包括地铁&#xff0c;也包括轻…

软件测试|深入理解SQL RIGHT JOIN:语法、用法及示例解析

引言 在SQL中&#xff0c;JOIN是一种重要的操作&#xff0c;用于将两个或多个表中的数据关联在一起。SQL提供了多种JOIN类型&#xff0c;其中之一是RIGHT JOIN。RIGHT JOIN用于从右表中选择所有记录&#xff0c;并将其与左表中匹配的记录组合在一起。本文将深入探讨SQL RIGHT …

x-cmd pkg | you-get - web 媒体内容下载工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 You-Get 是一个开源的命令行小型下载工具&#xff0c;用于从各种网站下载视频、音频和其他媒体文件。 它可以解析和下载嵌套在网页中的媒体&#xff0c;能从 YouTube、优酷、Niconico 、bilibili 等热门网站下载视频、…

leetcode:1108. IP 地址无效化

一、题目 二、函数原型 char* defangIPaddr(char* address) 三、思路 本题通俗来讲就是将字符串中的 . 替换为 [.] 先遍历字符串得出有num个 . 且申请 len 2*num 1 个char空间ans。len是原字符串长度&#xff0c;2*num是[ ]的个数&#xff0c;1是 ‘ \0 ’ 的空间。 …

STL——vector详解

目录 &#x1f4a1;基本概念 &#x1f4a1;存放内置数据类型 &#x1f4a1;存放自定义数据类型 &#x1f4a1;存放自定义数据类型指针 &#x1f4a1;vector容器嵌套容器 &#x1f4a1;vector构造函数 &#x1f4a1;vector赋值操作 &#x1f4a1;vector容量和大小 &…

Linux基础命令@grep、wc、管道符

目录 grep概念语法作用演示一演示二演示三&#xff0c;带选项 -n wc概念语法作用wc&#xff0c;不带选项-c&#xff0c;统计字节数-m&#xff0c;统计字符数-l&#xff0c;统计行数-w&#xff0c;统计单词数 管道符语法作用演示一演示二演示三演示四演示五 总结 grep 概念 gre…

十一、工具盒类(MyQQ)(Qt5 GUI系列)

目录 ​编辑 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 抽屉效果是软件界面设计中的一种常用形式&#xff0c;可以以一种动态直观的方式在有限大小的界面上扩展出更多的功能。本例要求实现类似 QQ 抽屉效果。 二、实现代码 #include "dialog.…

web前端开发技术复习问答题

目录 1.简述常见单标签和双标签有哪些&#xff1f; 2.常见块级元素和行级元素有哪些&#xff1f; 3.简述常见的列表有哪些&#xff1f;他们有什么区别&#xff1f; 4.简述超链接的href属性值如何设置&#xff1f;有什么区别 5.CSS基本语法 6. css中常见的引入方式有几种&…

共聘猫品牌创始人杨涛宾:从海关到人力资源行业的华丽转身

专访山东共聘猫教育科技集团董事长杨涛宾 2024新年的第一次人物专访&#xff0c;我们来到山东济南。大力财经的采访对象是创业者杨涛宾&#xff0c;他是山东共聘猫教育科技集团董事长&#xff0c;也是共聘猫品牌创始人和主要打造者。 我们面前的杨涛宾外表朴实&#xff0c;举…

图神经网络入门

图神经网络&#xff08;GNN&#xff09;是一组在图领域工作的深度学习方法。 这些网络最近已应用于多个领域&#xff0c;包括&#xff1a; 组合优化、推荐系统、计算机视觉—仅举几例。 这些网络还可用于对大型系统进行建模&#xff0c;例如社交网络、蛋白质-蛋白质相互作用网络…

使用docker镜像快速构建TVM

TVM docekr编译 文章目录 TVM docekr编译使用云镜像使用docker进行本地构建 使用云镜像 下载docker镜像 如果对docker指令不熟悉可以查阅&#xff1a; docker cli命令行 AP I TVM docker hub镜像 docker pull tlcpack/ci-cpu:20230604-060130-0af9ff90e运行container docker…

Java面试——框架篇

1、Spring框架中的单例bean是线程安全的吗&#xff1f; 所谓单例就是所有的请求都用一个对象来处理&#xff0c;而多例则指每个请求用一个新的对象来处理。 结论&#xff1a;线程不安全。 Spring框架中有一个Scope注解&#xff0c;默认的值就是singleton&#xff0c;单例的。一…

Java学习——设计模式——行为型模式2

文章目录 行为型模式状态模式观察者模式中介者模式迭代器模式访问者模式备忘录模式解释器模式 行为型模式 行为型模式用于描述程序在运行时复杂的流程控制&#xff0c;即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务&#xff0c;涉及算法与对象间职责的…

kubernetes(六)

文章目录 1. k8s架构2. k8s安装2.1 颁发证书2.2 部署etcd集群2.3 master节点安装2.3.1 api-server服务安装2.3.2 controller-manager服务安装2.3.3 scheduler服务安装 2.4 node节点安装2.5 配置flannel网络 1. k8s架构 2. k8s安装 # 增加免密操作 [rootk8s-node3 ~]# ssh-keyge…

搭建一个教育小程序的必要步骤

随着科技的飞速发展&#xff0c;小程序已经深入到我们生活的方方面面。对于教育行业来说&#xff0c;小程序的出现不仅为教育机构提供了新的宣传和互动平台&#xff0c;更为学生和家长带来了更为便捷的学习体验。那么&#xff0c;如何开发一款适合教育机构的小程序呢&#xff1…