Java常用类之 Java比较器、System类、Math类、BigInteger与BigDecimal

news2024/11/25 15:30:15

Java常用类

文章目录

  • 五、Java比较器
    • 5.1、Comparable 接口的使用
      • 5.1.1、自然排序:Comparable接口
      • 5.1.2、定制排序:Comparator接口
  • 六、System类
  • 七、Math类
  • 八、BigInteger与BigDecimal

五、Java比较器

提出背景:

Java中的对象,正常情况下,只能进行比较: == 或 !=。 不饿能使用 > 或 <的

但是在开发场景中,我们需要对多个对象进行排序,言外之意,就需要比较对象的大小。需要使用两个接口中的任何一个实现:Comparable 或 Comparator

5.1、Comparable 接口的使用

5.1.1、自然排序:Comparable接口

  1. 像String、包装类等实现了Comparable接口,重写了compareTo(obj)方法,给出了比较两个对象大小的
  2. 像String、包装类重写了compareTo(obj)方法以后,进行了从小到大的排列
  3. 重写compareTo(obj)方法的规则:
    1. 如果当前对象this大于形参对象obj,则返回正整数,
    2. 如果当前对象this小于形参对象obj,则返回负整数,
    3. 如果当前对象this等于形参对象obj,则返回零。
  4. 对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法,在compareTo(obj)方法中指明如何排序

5.1.2、定制排序:Comparator接口

  1. 背景:当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码, 或者实现了java.lang.Comparable接口的排序规则不适合当前的操作,那 么可以考虑使用 Comparator 的对象来排序
  2. 重写compare(Object o1,Object o2)方法,比较o1和o2的大小:如果方法返回正整数,则表示o1大于o2;如果返回0,表示相等;返回负整数,表示 o1小于o2。
/*
定制排序:Comparator接口
 */
@Test
public void test4(){
    Goods[] arr = new Goods[6];
    arr[0] = new Goods("lenovoMouse", 34);
    arr[1] = new Goods("dellMouse", 43);
    arr[2] = new Goods("xiaomiMouse", 23);
    arr[3] = new Goods("huaweiMouse", 65);
    arr[4] = new Goods("huaweiMouse", 224);
    arr[5] = new Goods("micorsoftMouse", 43);

    Arrays.sort(arr, new Comparator() {
        //指明商品比较大小的方式:按照产品名称从低到高排序,再按照价格从高到低排序
        @Override
        public int compare(Object o1, Object o2) {
            if (o1 instanceof Goods && o2 instanceof Goods){
                //强转
                Goods goods1 = (Goods) o1;
                Goods goods2 = (Goods) o2;
                if (goods1.getName().equals(goods2.getName())){
                    return -Double.compare(goods1.getPrice(), goods2.getPrice());
                }else {
                    return goods1.getName().compareTo(goods2.getName());
                }
            }
            throw new RuntimeException("输入的数据类型不一致");
        }
    });

    System.out.println(Arrays.toString(arr));
}

Comparable接口与Comparator接口的使用的对比:

  • Comparable接口的方式一旦一定,保证Comparable接口实现类的对象在任何位置都可以比较大小
  • Comparator接口属于临时性的比较。

六、System类

System类代表系统,系统级的很多属性和控制方法都放置在该类的内部。 该类位于java.lang包。

由于该类的构造器是private的,所以无法创建该类的对象,也就是无法实例化该类。其内部的成员变量和成员方法都是static的,所以也可以很方便 的进行调用。

成员方法:

* native long currentTimeMillis():
该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时
间和GMT时间(格林威治时间)197011000秒所差的毫秒数。

* void exit(int status):
该方法的作用是退出程序。其中status的值为0代表正常退出,非零代表
异常退出。使用该方法可以在图形界面编程中实现程序的退出功能等。

* void gc():
该方法的作用是请求系统进行垃圾回收。至于系统是否立刻回收,则
取决于系统中垃圾回收算法的实现以及系统执行时的情况。

* String getProperty(String key):
该方法的作用是获得系统中属性名为key的属性对应的值。系统中常见
的属性名以及属性的作用如下表所示:
image.png

基本代码如下:

public void test1(){
    String javaVersion = System.getProperty("java.version");
    System.out.println("java的version: " + javaVersion);
    String javaHome = System.getProperty("java.home");
    System.out.println("java的home: " + javaHome);
    String osName = System.getProperty("os.name");
    System.out.println("os的name: " + osName);
    String osVersion = System.getProperty("os.version");
    System.out.println("os的version: " + osVersion);
    String userName = System.getProperty("user.name");
    System.out.println("user的name: " + userName);
    String userHome = System.getProperty("user.home");
    System.out.println("user的home: " + userHome);
    String userDir = System.getProperty("user.dir");
    System.out.println("user的dir: " + userDir);
}

七、Math类

java.lang.Math提供了一系列静态方法用于科学计算。其方法的参数和返回 值类型一般为double型

abs绝对值
acos,asin,atan,cos,sin,tan三角函数
sqrt平方根
pow(double a,doble b)a的b次幂
log自然对数
expe为底指数
max(double a,double b)
min(double a,double b)
random()返回0.0到1.0的随机数
long round(double a)double型数据a转换为long型(四舍五入)
toDegrees(double angrad)弧度—>角度
toRadians(double angdeg)角度—>弧度

八、BigInteger与BigDecimal

image.pngimage.pngimage.png

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

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

相关文章

泰尔指数案例分析

泰尔指数是一种衡量‘不平均’的指数&#xff0c;比如用于衡量‘贫富差异’&#xff0c;也或者衡量大气污染的水平是否一致&#xff0c;二氧化碳排放水平差异情况等。泰尔指数的数学原理是‘熵’&#xff0c;‘熵’是一种衡量数据‘有序性’的指标&#xff0c;当‘熵’值越大时…

GEE:快速实现NDVI时间序列NDVI线性趋势和变化敏感性计算(斜率、截距)

作者:CSDN @ _养乐多_ 本博客将向您介绍如何使用Google Earth Engine(GEE)平台来处理Landsat 5、7和8的卫星图像数据,计算NDVI的斜率和截距,以及如何导出这些结果供进一步分析使用。 文章目录 一、代码详解1.1 核心代码详解1.2 核心代码详解1.3 代码框架介绍二、完整代码…

buuctf web [极客大挑战 2019]Http

进入题目上下翻找了一下&#xff0c;没有什么突破口 检查了一下源码&#xff0c;有一个跳转页面 点击页面&#xff0c;跳转到了新的地方 新页面里没有别的跳转接口 但是页面中有提示&#xff1a;It doesnt come from https://Sycsecret.buuoj.cn 打开burp 页面提示要求来自h…

群体遗传学必备知识锦囊

群体遗传学应知应会 今天分享一篇关于群体遗传学的笔记&#xff0c;主要参考了网络公开资料以及公开发表的文献&#xff0c;包含群体遗传的概述、研究方法、应用领域、分析流程、统计学原理、群体结构评估等。 群体和个体有什么区别&#xff1f; 在遗传学中&#xff0c;群体和个…

innovus: 各种padding一勺烩

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f; 拾陆楼知识星球入口 instance padding specifyInstPad $instance_name -left/-right $site_num site_num指的是padding的大小以site宽度为单位。 module padding setPlaceMode -place_global_mo…

人工智能训练师

人工智能训练师是一个较新的职业&#xff0c;2020年2月才被正式纳入国家职业分类目录。他们主要负责在人工智能产品使用过程中进行数据库管理、算法参数设置、人机交互设计、性能测试跟踪及其他辅助作业。 这个职业的背景源于AI公司从客户&#xff08;用户&#xff09;那里获取…

mac office2019

目录 简介 macoffice2019 安装步骤 总结 简介 macoffice2019 Mac Office 2019是微软为苹果Mac系统用户推出的办公软件套装。它包括了Word、Excel、PowerPoint等常用应用程序&#xff0c;并且提供了一系列全新的功能和工具&#xff0c;以提升用户的办公效率和创造力。 Mac O…

容器核心技术之Namespace与Cgroup

容器是一种流行的虚拟化技术&#xff0c;它允许我们在同一台计算机上与其他进程在独立环境中运行进程。那么容器是如何做到这一点的呢&#xff1f;为此&#xff0c;容器是从 Linux 内核的一些新功能构建的&#xff0c;其中两个主要功能是“namespace”和“cgroup”。 1.Namespa…

IDE VS2012正则替换 并将捕获的内容放入替换的字符串中$1

场景&#xff1a; 我想把ESLOG_INF(("deviceName %s", deviceName));只要一对括号&#xff0c;即ESLOG_INF(“deviceName %s”, deviceName); 获取不想替换的内容 先用正则 ESLOG_INF\(\((.*)\)\);捕获 不想替换的内容 "deviceName %s", deviceName放…

Qt --- Day01

效果图&#xff1a; 头像的圆形未实现 单击登陆&#xff0c;触发信号与槽 enter_widget.h #ifndef ENTER_H #define ENTER_H#include <QDialog> #include<QLabel> #include<QTimer> class enter_widget : public QDialog {Q_OBJECT public:explicit enter_…

【面试题】前端应该了解的个JavaScript技巧有什么?

前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 【国庆头像】- 国庆爱国 程序员头像&#xff01;总有一款适合你&#xff01; 简介 如果你用这些技巧优化你的js码&#xff0c;它可以帮助你编写更干净、…

AUTOSAR通信篇 - CAN网络通信(五:ComM)

文章目录 模块交互EcuM交互BswM交互NvM交互CanSM交互NM交互 ComM功能Paritial Network Cluster 管理Partial Network Cluster 管理功能ComM PNC状态机在主状态COMM_PNC_NO_COMMUNICATION中PNC的行为PNC网关相关的要求 从断电进入PNC主状态COMM_PNC_NO_COMMUNICATION时在主状态C…

微软发现影响 Linux 和 macOS系统的 ncurses 库漏洞

微软在 ncurses&#xff08;new curses 的缩写&#xff09;编程库中发现了一组内存损坏漏洞&#xff0c;威胁者可利用这些漏洞在易受攻击的 Linux 和 macOS 系统上运行恶意代码。 微软威胁情报研究人员 Jonathan Bar Or、Emanuele Cozzi 和 Michael Pearse 在今天发布的一份技…

GcExcel:Java 应用创建、修改和保存 Excel 电子表格 -Crack

在 Java 应用程序中创建、修改和保存 Excel 电子表格&#xff1a; GrapeCity Documents for Excel&#xff0c;Java 版 (GcExcel) 是一个高速 Java Excel 电子表格 API 库&#xff0c;不需要依赖于 Microsoft Excel。用户可以通过 Java 应用程序以编程方式创建、编辑、导入和导…

PP-Tracking之C++部署

文章目录 概要环境fastdeploy源码编译PP-Tracking源码编译使用参考概要 PP-Tracking是基于飞桨深度学习框架的业界首个开源实时跟踪系统。针对实际业务的难点痛点,PP-Tracking内置行人车辆跟踪、跨镜头跟踪、多类别跟踪、小目标跟踪及流量计数等能力与产业应用,同时提供可视…

大数据学习1.5-单机Hadoop

1.修改主机信息 vi /etc/hosts 2.修改信息如下(这里第三位一定是自己的IP 每个人都不一样) 192.168.216.140 hadoop01 192.168.216.141 hadoop02 192.168.216.142 hadoop033.修改Hadoop配置信息-1进入配置信息文件 cd /usr/local/hadoop/hadoop-2.7.1/etc/hadoop/ 4.修改Had…

wx-open-subscribe自定义样式和按钮无效【已解决】

有一个需求&#xff0c;是在微信公众号中加下类似于小程序的的那个订阅消息弹框&#xff0c;需要用户点击允许才可以给用户推送消息。如下图 微信官方文档&#xff1a;wx-open-subscribe 官方示例如下&#xff1a; 这个代码一看也能看明白&#xff0c;<wx-open-subscribe包…

【计算机网络】——数据链路层(应用:介质访问控制)

//仅做个人复习和技术交流&#xff0c;图片取自王道考研&#xff0c;侵删 一、大纲 1、介质访问控制 信道划分介质访问控制 随机访问介质访问控制 2、局域网 3、广域网 4、数据链路层设备 二、介质访问控制 省流&#xff1a;把广播信道通过介质访问控制机制 逻辑上转换为 …

Window 10安装MySQL 5.7

1、访问如下链接进行下载&#xff1a;Mysql官方下载地址 官方地址下载的东西没有那么多病毒~。这东西见仁见智吧哈哈~。有些人不怕这个。 注意安装上面这个下面的是test 2、填写mysql的环境变量 具体操作步骤如下&#xff1a; 在桌面按下快捷键“WinR”输入“control sysdm…

JVM内存模型(JMM)

目录 一、运行时数据区域划分 ​编辑 二、线程私有的 1、程序计数器 2、虚拟机栈&#xff08;VM Stack&#xff09; 3、本地方法栈 三、线程公有的 1、堆 2、元空间 Java程序把内存控制权利交给JVM虚拟机&#xff0c;一旦出现内存泄漏和溢出方法的问题&#xff0…