重学java 29.经典接口

光阴似箭,我好像跟不上

                        —— 24.5.6

一、java.lang.Comparable

        我们知道基本数据类型的数据(除boolean类型外)需要比较大小的话,直接使用比较运算符即可,但是引用数据类型是不能直接使用比较运算符来比较大小的。那么,如何解决这个问题呢?
        java给所有引用数据类型的大小比较,指定了一个标准接口,就是java.lang.Comparable接口:

package java.lang;public interface Comparable{int compareTo(Object obj);
}

那么我们想要使得我们某个类的对象可以比较大小,怎么做呢?

步骤:
        第一步:哪个类的对象要比较大小,哪个类就实现java.lang.Comparable接口,并重写方法。

                方法体就是你要如何比较当前对象和指定的另一个对象的大小

        第二步:对象比较大小时,通过对象调用compareTo方法,根据方法的返回值决定谁大谁小。
                this对象(调用compareTo方法的对象)减指定对象(传入compareTo()的参数对象)大于0,返回正整数

                this对象(调用compareTo方法的对象)减指定对象(传入compareTo()的参数对象)小于0返回负整数

                this对象(调用compareTo方法的对象)减指定对象(传入compareTo()的参数对象)等于0返回

CompareTo函数:

public class Student implements Comparable {private String name;private int Score;public Student(String name, int score) {this.name = name;Score = score;}public Student() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getScore() {return Score;}public void setScore(int score) {Score = score;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", Score=" + Score +'}';}//    this代表students[i]//    o代表students[i+1]//    如果students[i].getscore()-students[i+1].getstore()>0//    证明数组中的钱一个对象比后一个对象分数高@Overridepublic int compareTo(Object o) {// 向下转型Student s = (Student) o;return this.getScore()-s.getScore();}
}

Test:

    public static void main(String[] args) {// 创建一个数组Student[] students = new Student[3];Student s1 = new Student("张三",100);Student s2 = new Student("李四",60);Student s3 = new Student("王五",90);students[0]=s1;students[1]=s2;students[2]=s3;for (int j = 0; j < students.length-1; j++) {for (int i = 0; i < students.length-1-j; i++) {// 如果students[i]>students[i+1],就换位置if (students[i].compareTo(students[i+1])>0){Student tmp = students[i];students[i] = students[i+1];students[i+1] = tmp;}}}//  遍历一下for (int i = 0; i < students.length; i++) {System.out.println(students[i]);}}

二、java.util.Comparator

思考:
        (1)如果一个类,没有实现Comparabe接口,而这个类你又不方便修改(例如:一些第三方的类,你只有.class文件,没有源文件),那么这样类的对象也要比较大小怎么办?
        (2)如果一个类,实现了Comparable接口,也指定了两个对象的比较大小的规则,但是此时此刻我不想按照它预定义的方法比较大小,但是我又不能随意修改,因为会影响其他地方的使用,怎么办?

        JDK在设计类库之初,也考虑到这种情况了,所以又增加了一个java.util.Comparator接口。

package java.util;public interface Comparator{int compare(Object o1,Object o2);
}

步骤:

        第一步:编写一个类,我们称之为比较器类型,实现java.ulil.Comparator接口,并重写方法。

                方法体就是你要如何指定的两个对象的大小
        第二步:比较大小时,通过比较器类型的对象调用compare()方法,将要比较大小的两个对象作为compare方法的实参传入,根据方法的返回值决定谁大谁小。
        o1对象减o2大于0返回正整数
        o1对象减o2小于0返回负整数
        o1对象减o2等于0返回零

Comparator函数

import java.util.Comparator;public class Student2 implements Comparator {private String name;private int Score;public Student2(String name, int score) {this.name = name;Score = score;}public Student2() {}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getScore() {return Score;}public void setScore(int score) {Score = score;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", Score=" + Score +'}';}//    o1代表students[i]
//    o2代表students[i+1]
//    如果o1的分数>o2的分数,compare方法返回正整数
//    如果o1的分数<o2的分数,compare方法返回负整数
//    如果o1的分数=o2的分数,compare方法返回0@Overridepublic int compare(Object o1, Object o2) {Student2 s1 = (Student2) o1;Student2 s2 = (Student2) o2;return s1.getScore()-s2.getScore();}
}

Test函数

public class Demo160ClassicObject2 {public static void main(String[] args) {// 创建一个数组Student2[] students = new Student2[3];Student2 s1 = new Student2("张三",100);Student2 s2 = new Student2("李四",60);Student2 s3 = new Student2("王五",90);students[0]=s1;students[1]=s2;students[2]=s3;Student2 student = new Student2();for (int j = 0; j < students.length-1; j++) {for (int i = 0; i < students.length-1-j; i++) {// 如果students[i]>students[i+1],就换位置if (student.compare(students[i],students[i+1])>0){Student2 tmp = students[i];students[i] = students[i+1];students[i+1] = tmp;}}}//  遍历一下for (int i = 0; i < students.length; i++) {System.out.println(students[i]);}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ECC 号码总结

1、问题背景 在手机开发过程中&#xff0c;经常遇见各种紧急号码问题&#xff0c;在此特意总结下紧急号码相关知识。 2、紧急号码来源 在MTK RILD EccNumberSource.h中&#xff0c;定义了如下几种紧急号码来源。 按优先级排序介绍如下 2.1、SOURCE_NETWORK 网络下发&#xff…

本地大语言模型LLM的高效运行专家 | Ollama

Ollama简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它帮助用户快速在本地运行大模型。通过简单的安装指令&#xff0c;用户可以执行一条命令就在本地运行开源大型语言模型&#xff0c;如Llama 2。Ollama极大地简化了在Docker容器内部署和管理LLM的过程&#xff0…

Linux网络设置

配置网络相关设置 一般包括如下内容&#xff1a; 主机名 IP/netmask A B 路由&#xff1a;默认网关 DNS服务器 主DNS服务器 次DNS服务器 第三个DNS服务器 ping baidu 网络配置命令 ifconfig ifconfig -a #表示显示所有网卡包括没有启动的网卡 ifconfig 网卡名称 [up|down…

考研数学|基础跟张宇,强化直接1000题还是先做660?

跟宇哥用1000题的&#xff0c;我愿称之为卷王之王&#xff01;660对基础阶段是绝佳的查漏补缺&#xff0c;必做&#xff01; 自我介绍一下&#xff1a;我21年一战数学83&#xff0c;总分没过线&#xff0c;22年二战143&#xff0c;逆袭上岸211&#xff01;660是我的心头好&…

js api part4

其他事件 页面加载事件 外部资源&#xff08;如图片、外联CSS和JavaScript等&#xff09;加载完毕时触发的事件 原因&#xff1a;有些时候需要等页面资源全部处理完了做一些事情&#xff0c;老代码喜欢把 script 写在 head 中&#xff0c;这时候直接找 dom 元素找不到。 事件…

简单介绍IIC通信协议

文章目录 一&#xff0c;简单介绍二&#xff0c;IIC物理层三&#xff0c;IIC通信时序1.起始位与停止位2.IIC读写地址位信号3.IIC应答信号4.IIC数据位收发信号 四&#xff0c;总线速率五&#xff0c;主机发送数据流程六&#xff0c;主机接收数据流程七&#xff0c;IIC的时钟延展…

力扣每日一题109:有序链表转换二叉搜索树

题目 中等 给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0&#xff0c;-3,9&#xff0c;-10,null,5]&#xff0c;它…

高效转化,智能私信软件策略揭秘

在数字营销的浪潮中&#xff0c;智能私信软件策略正成为提升转化率的重要工具。这种软件以其个性化、自动化的特点&#xff0c;正在重新定义与客户的互动方式&#xff0c;让企业能够更加高效地吸引并留住潜在客户。 智能私信软件的核心在于其高度的定制化和人性化设计。通过大数…

Android Handler用法

Android Handler用法 为什么要设计Handler机制&#xff1f;Handler的用法1、创建Handler2、Handler通信2.1 sendMessage 方式2.2 post 方式 Handler常用方法1、延时执行2、周期执行 HandlerThread用法主线程-创建Handler子线程-创建Handler FAQMessage是如何创建主线程中Looper…

今天发现个有意思的问题:java基础篇章网络编程的报错问题,顺便看一下各个GPT的实力

问题&#xff1a; 一个java socket网络编程的引发的异常&#xff0c;具体代码Client.java、Server.java&#xff0c;如下 Client.java package Test2;import java.io.*; import java.net.Socket;public class Client {public static void main(String[] args) throws IOExce…

JMeter 请求头信息配置详解

在进行 Web 测试和 API 测试时&#xff0c;正确配置 HTTP 请求头是关键步骤之一&#xff0c;尤其当使用诸如 JMeter 这样的强大工具时。在本文中&#xff0c;我将详细介绍如何在 JMeter 中有效地配置和管理HTTP请求头。 在 JMeter 中添加和配置 HTTP 请求头 步骤 1: 打开 HTT…

中间件研发之Springboot自定义starter

Spring Boot Starter是一种简化Spring Boot应用开发的机制&#xff0c;它可以通过引入一些预定义的依赖和配置&#xff0c;让我们快速地集成某些功能模块&#xff0c;而无需繁琐地编写代码和配置文件。Spring Boot官方提供了很多常用的Starter&#xff0c;例如spring-boot-star…

张大哥笔记:卖盗版网课,获利 100 万被抓

这几天刷视频&#xff0c;看到一个新闻&#xff0c;某大学生卖盗版网课&#xff0c;把别人2000多正版网课&#xff0c;以做活动名义售卖20元&#xff0c;获利100多万被抓。 下方图片来自&#xff1a;极目新闻 卖这种盗版网课&#xff0c;门槛低&#xff0c;成本低&#xff0c;…

揭秘!如何利用自动化工具提升抖音推广效果

亲爱的读者朋友们&#xff0c;你是否在为抖音的推广效果而苦恼&#xff1f;看着别人家的视频轻松获得大量曝光&#xff0c;你是否也心生羡慕&#xff1f;今天&#xff0c;我们就来分享一个秘密武器&#xff0c;让你轻松提升抖音推广效果&#xff01; 首先&#xff0c;让我们来了…

为何美国多IP服务器是全自动内容采集站的最佳选择?

为何美国多IP服务器是全自动内容采集站的最佳选择? 在建设全自动内容采集站时&#xff0c;选择合适的服务器至关重要。而在众多选项中&#xff0c;美国多IP服务器被认为是最佳选择&#xff0c;究竟为何呢?本文将从多个方面进行深入探讨。 为何美国多IP服务器是全自动内容采集…

项目|保障房房产管理系统,政务房产解决方案

一、系统概况 保障房管理系统是是为了落实中央关于住房保障的相关政策&#xff0c;实现对低收入家庭住房状况的调查管理、保障计划及落实管理、保障申请及审核管理、保障户和保障房源档案管理等。 针对政府保障房产管理的一站式解决方案&#xff0c;专注于为解决复杂、繁琐的…

【精品毕设推荐】搜索引擎的设计与实现

点击免费下载原文及代码 摘要 我们处在一个大数据的时代&#xff0c;伴随着网络信息资源的庞大&#xff0c;人们越来越多地注重怎样才能快速有效地从海量的网络信息中&#xff0c;检索出自己需要的、潜在的、有价值的信息&#xff0c;从而可以有效地在日常工作和生活中发挥作…

【C++】stack、queue和priority_queue的模拟实现

在本篇博客中&#xff0c;作者将会讲解STL中的stack、queue和priority_queue的模拟实现&#xff0c;同时还会带大家了解一下deque这个容器。 一.什么是适配器 STL中一共有6大组件&#xff1a;容器&#xff0c;适配器&#xff0c;空间配置器&#xff0c;仿函数&#xff0c;迭代器…

机器学习——3.梯度计算与梯度下降

基本概念 梯度的本意是一个向量&#xff08;矢量&#xff09;&#xff0c;表示某一函数在该点处的方向导数沿着该方向取得最大值&#xff0c;即函数在该点处沿着该方向&#xff08;此梯度的方向&#xff09;变化最快&#xff0c;变化率最大&#xff08;为该梯度的模&#xff0…

validation的简单使用

首先是依赖 我这里使用的是 web 工程&#xff0c;所以多一个web依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency><dependency><groupId>…