南通网站关键词优化/网站维护合同

南通网站关键词优化,网站维护合同,免费自助在线公司起名,键盘事件对网站交互目录 引言: 一、认识接口 1.1 Comparable 1.2 Comparator ​编辑 1.3 核心概念对比 二、代码实现对比 2.1 Comparable 实现示例 2.2 Comparator 实例示例 三、核心区别详解 3.1 设计理念差异 3.2 方法调用 3.3 使用情景 四、本质区别总结 引言&#x…

目录

引言:

一、认识接口

1.1 Comparable

1.2 Comparator

​编辑

1.3 核心概念对比

二、代码实现对比

2.1 Comparable 实现示例

2.2 Comparator 实例示例

三、核心区别详解

3.1 设计理念差异

3.2 方法调用

3.3 使用情景

四、本质区别总结


引言:

在 Java 开发中,对象的比较是常见的需求。Java 给我们提供了两个接口 Comparable 与 Comparator 接口,这两个接口的核心功能是定义对象之间的比较规则。但是二者的使用规则和环境又有所不同,接下来让我们一同来了解其所在差异。


一、认识接口

我们可以在 jdk-api-1.8 文档中查看这两个接口的具体实现:

1.1 Comparable


1.2 Comparator


1.3 核心概念对比

特性ComparableComparato
包位置java.langjava.util
核心方法compareTo(T o)compare(T o1, T o2)
排序类型自然比较定制比较
多比较策略不支持支持多个
影响原类需要修改类不修改原类
使用场景默认比较规则特殊比较需求

二、代码实现对比

2.1 Comparable 实现示例

让对象具备自我比较能力。换句话说就是:自己和别人比

class Person implements Comparable<Person> {String name;int age;public Person(String name, int age) {this.name = name;this.age = age;}// 自然比较:按年龄@Overridepublic int compareTo(Person other) {// 比较规则可以自己规定return Integer.compare(this.age, other.age);/*retutn this.age - other.age;这样定义比较规则也是可以的,但存在一个潜在风险需要特别注意当比较值非常大时(接近Integer.MAX_VALUE或Integer.MIN_VALUE),减法运算可能导致整数溢出*/}
}public class Test {public static void main(String[] args) {// 实例化对象并直接比较Person alice = new Person("Alice", 25);Person bob = new Person("Bob", 30);int result = alice.compareTo(bob);System.out.println("年龄比较结果:" + interpretResult(result));}private static String interpretResult(int result) {if (result < 0) return "Alice比Bob年轻";else if (result > 0) return "Alice比Bob年长";return "两人同龄";}
}// 执行结果:  年龄比较结果:Alice比Bob年轻


2.2 Comparator 实例示例

通过外部比较器灵活比较。换句话说就是:你妈妈拿你和别人家的孩子比(学习成绩、听不听话、做不做家务……)

import java.util.Comparator;// 独立比较器类(按姓名)
class NameComparator implements Comparator<Person> {@Overridepublic int compare(Person p1, Person p2) {return p1.name.compareTo(p2.name);}
}public class Test2 {public static void main(String[] args) {// 实例化对象并使用比较器Person Tom = new Person("Tom", 28);Person Sam = new Person("Sam", 22);// 使用具体比较器Comparator<Person> nameComp = new NameComparator();int nameResult = nameComp.compare(Tom, Sam);System.out.println("姓名比较结果:" + (nameResult < 0 ? "Tom在Sam之前" : "Tom在Sam之后"));// 匿名内部类比较器Comparator<Person> ageComp = new Comparator<Person>() {@Overridepublic int compare(Person p1, Person p2) {return Integer.compare(p1.age, p2.age);}};int ageResult = ageComp.compare(Tom, Sam);System.out.println("年龄比较结果:" + (ageResult < 0 ? "Tom更年轻" : "Tom更年长"));}
}// 执行结果:
// 姓名比较结果:Tom在Sam之后
// 年龄比较结果:Tom更年长


三、核心区别详解

3.1 设计理念差异

  • Comparable 

    对象自身实现比较逻辑,如同“自我认知”:
    Temperature t1 = new Temperature(25.5);
    Temperature t2 = new Temperature(30.0);
    t1.compareTo(t2); // 温度计自己知道如何比较
  • Comparator

    外部策略定义比较规则,如同“第三视角”:
    Product iphone = new Product("Phone", 9999.99);
    Product XiaoMi = new Product("XiaoMi", 1999.99);PriceComparator priceJudge = new PriceComparator();
    priceJudge.compare(iphone, XiaoMi); // 外部比较器裁决价格高低

3.2 方法调用

// Comparable调用方式
objA.compareTo(objB);  // 对象A主动比较对象B// Comparator调用方式
comparator.compare(objA, objB);  // 比较器独立比较两个对象

3.3 使用情景

  • 选择 Comparable :

    1. 对象有明显的自然顺序(如日期、温度……)
    2. 需要作为默认比较规则
     
  • 选择 Comparator :

    1. 需要多种比较方式
    2. 无法修改类源码(如第三方库的类)
    3.需要临时比较规则

四、本质区别总结

对比维度ComparableComparator
比较主体对象自身具备比较能力第三方执行比较
代码侵入性需要修改类结构无需修改原类
比较视角第一人称( this  vs  other )第三人称(旁观者观察两个对象)
方法调用obj1.compareTo(obj2)comparator.compara(obj1,obj2)
设计理念内聚性(比较逻辑属于对象本身)多比较策略

积跬步,以致千里

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

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

相关文章

Android自动化测试工具

细解自动化测试工具 Airtest-CSDN博客 以下是几种常见的Android应用自动化测试工具&#xff1a; Appium&#xff1a;支持多种编程语言&#xff0c;如Java、Python、Ruby、JavaScript等。可以用于Web应用程序和原生应用程序的自动化测试&#xff0c;并支持iOS和Android平台。E…

vue3:八、登录界面实现-页面初始搭建、基础实现

一、初始工作 1、创建登录文件 在src/views中创建文件LoginView.vue文件 2、创建路由 在router/index.js中增加登录的信息 代码 import { createRouter, createWebHistory } from vue-router import HomeView from ../views/HomeView.vue const router createRouter({hist…

Qt从入门到入土(十) -数据库操作--SQLITE

认识 数据库是用于存储、管理和检索数据的系统化集合。它是一种按照特定结构组织数据的存储方式&#xff0c;通过软件&#xff08;数据库管理系统&#xff0c;DBMS&#xff09;来实现数据的高效存储、查询、更新和管理。通过文件存储数据适用于少量的数据&#xff0c;而当拥有…

图像分类数据集

《动手学深度学习》-3.5-学习笔记 # 通过ToTensor实例将图像数据从PIL类型变换成32位浮点数格式&#xff0c; # 并除以255使得所有像素的数值均在0&#xff5e;1之间 trans transforms.ToTensor()#用于将图像数据从 PIL 图像格式&#xff08;Python Imaging Library&#xff…

架构师面试(十五):熔断设计

问题 某电商平台经常需要在大促运营活动中暂停评论、退款等业务&#xff0c;基于服务治理的设计理念&#xff0c;我们需要对该电商平台微服务系统的【服务熔断】进行设计&#xff0c;对此下面描述中说法正确的有哪几项呢&#xff1f; A. 服务管控系统管理着平台中所有服务之间…

Ubuntu20.04安装运行DynaSLAM

目录 一、安装Anaconda 二、相关依赖库安装 1、boost安装 2、Eigen 3安装 3、opencv安装 4、Pangolin安装 三、配置Mask_RCNN环境 四、DynaSLAM编译 五、DynaSLAM运行 一、安装Anaconda 打开以下链接&#xff1a; Index of / 下载和自己系统匹配的安装包。这里下…

X86 RouterOS 7.18 设置笔记三:防火墙设置(IPV4)

X86 j4125 4网口小主机折腾笔记五&#xff1a;PVE安装ROS RouterOS X86 RouterOS 7.18 设置笔记一&#xff1a;基础设置 X86 RouterOS 7.18 设置笔记二&#xff1a;网络基础设置(IPV4) X86 RouterOS 7.18 设置笔记三&#xff1a;防火墙设置(IPV4) X86 RouterOS 7.18 设置笔记四…

从 YOLOv1 到 YOLOv2:目标检测的进化之路

引言 你有没有想过&#xff0c;当你用手机拍一张照片&#xff0c;里面的人、车、狗是怎么被自动识别出来的&#xff1f;这背后靠的就是目标检测技术。目标检测是计算机视觉中的一个重要领域&#xff0c;它不仅要回答“图片里有什么”&#xff0c;还要告诉你“这些东西在哪里”…

数据的存储---整型、浮点型

目录 一、整型在内存中的存储 1. 原码、反码、补码 2. 大端与小端 二、浮点数在内存中的存储 1.浮点数的存 2. 浮点数的取 3. 题目解析 一个变量的创建需要在内存中开辟空间&#xff0c;而开辟的空间大小是由数据类型决定的。下面我们就来讨论一下整型、浮点型在内存中的…

Java 大视界 -- Java 大数据在智能教育虚拟实验室建设与实验数据分析中的应用(132)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

47.全排列 II

47.全排列 II 力扣题目链接 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] 输出…

centos没有ll

vi /etc/bashrc alias ll‘ls -l’ source /etc/bashrc

04 1个路由器配置一个子网的dhcp服务

前言 这是最近一个朋友的 ensp 相关的问题, 这里来大致了解一下 ensp, 计算机网络拓扑 相关基础知识 这里一系列文章, 主要是参照了这位博主的 ensp 专栏 这里 我只是做了一个记录, 自己实际操作了一遍, 增强了一些 自己的理解 当然 这里仅仅是一个 简单的示例, 实际场景…

网络空间安全(31)安全巡检

一、定义与目的 定义&#xff1a; 安全巡检是指由专业人员或特定部门负责&#xff0c;对各类设施、设备、环境等进行全面或重点检查&#xff0c;及时发现潜在的安全隐患或问题。 目的&#xff1a; 预防事故发生&#xff1a;通过定期的安全巡检&#xff0c;及时发现并解决潜在的…

信息学奥赛一本通 1449:【例题2】魔板

题目 1449&#xff1a;【例题2】魔板 分析 首先注意&#xff1a;输入是按顺时针给出的&#xff0c;但我们处理时需要按正常顺序排&#xff0c;可以用以下代码读入 string s(8, 0); // 初始化全零字符串 cin>>s[0]>>s[1]>>s[2]>>s[3]; cin>>…

Unity开发的抖音小游戏接入抖音开放平台中的流量主(抖音小游戏接入广告)

前言:作者在进行小游戏审核版本的过程中,碰到了下列问题,所以对这个抖音小游戏接入广告研究了下。 还有就是作者的TTSDK版本号是6.2.6,使用的Unity版本是Unity2022.3.29f1,最好和作者的两个版本号保持一致,因为我发现TTSDK旧版的很多函数在新版中就已经无法正常使用了,必…

【xv6操作系统】系统调用与traps机制解析及实验设计

【xv6操作系统】系统调用与traps机制解析及实验设计 系统调用相关理论系统调用追溯系统调用实验设计Sysinfo&#x1f6a9;系统调用总结&#xff08;结合trap机制&#xff09; traptrap机制trap代码流程Backtrace实验alarm实验 系统调用 相关理论 隔离性&#xff08;isolation)…

在微信小程序或前端开发中,picker 和 select 都是用户交互中用于选择的组件,但它们在功能、设计和使用场景上有一定的区别

在微信小程序或前端开发中&#xff0c;picker 和 select 都是用户交互中用于选择的组件&#xff0c;但它们在功能、设计和使用场景上有一定的区别。 1. picker 的特点 描述&#xff1a; picker 是微信小程序中的原生组件&#xff0c;通常用于选择单项或多项值&#xff0c;如时…

PMP 证书的含金量怎么样?

pmp含金量&#xff0c;这是一个很有争议的话题&#xff0c;我根据我以往的面试跟工作经历对 PMP 也有几点看法&#xff0c;想跟大家聊一聊。 一、如果真心想做项目管理&#xff0c;PMP 一定要去考一个 现在的早已不是凭经验做项目的时代了&#xff0c;各大企业都追求专业式的…

Python数据类型进阶——详解

—— 小 峰 编 程 目录 1.整型 1.1 定义 1.2 独有功能 1.3 公共功能 1.4 转换 1.5 其他 1.5.1 长整型 1.5.2 地板除(除法&#xff09; 2. 布尔类型 2.1 定义 2.2 独有功能 2.3 公共功能 2.4 转换 2.5 其他 做条件自动转换 3.字符串类型 3.1 定义 3.2 独有功能…