当前位置: 首页 > news >正文

常用类与比较器

常用类
    学一个类,先搞清楚继承关系,再看源码
    
    包装类Wrapper
        jdk5之前是手动装箱拆箱
        jdk5及之后是自动装箱拆箱(调用valueOf方法(自动默认)/创建对象的构造方法,XXXvalue方法)
            直接赋值就是自动拆装箱,编译器会自动补全 调用valueOf的方法  在对象数组里,与jvm字节码的后直接跟小值无关
            自动拆装箱是与自身的包装类有关的,不是随便就可以:比如object o=true是不行的
        继承关系
            父类是Numbeer(Boolean与character不是,父类是object)
            实现了Comparable接口(可比较的),Serializable接口(代表可以串行化,就可以网络传输)
        源码:
            valueOf源码可以看到是从一个cache数组中直接取,或创建一个对象【面试题重点,类加载时,-128-127数组就创建赋值好了】
        
        常用方法:
            Integer.MIN_VALUE返回最小值
            Integer.MAX_VALUE返回最大值
            
            Character.isDgit(字符)            判断是不是数字
            Character.isLetter(字符)        判断是不是字符
            Character.isUpperCase(字符)        判断是不是大写
            Character.isLowerCase(字符)        判断是不是小写
            Character.ToUpperCase(字符)        转为大写
            Character.ToLowerCase(字符)        转为小写
            Character.isWriteSpace(字符)    判断是不是空格
            
        包装类-》String
            1 +“”
            2 包装类的toString方法(基本练习自动转包装类,包装类点toString方法)
            3 String类的valueOf方法(静态方法,参数接收对象)
        String-》包装类
            1 包装类的parseXXX方法            此方法是把string的每一个char取出判断是不是数字,然后转为int
            2 直接new,参数传String
            
    String
        字符串字符采用Unicode编码,也就是char,占2字节(不论是字母还是汉字)
        继承关系
            父类是object    
            实现了Comparable接口,Serializable接口,charSequence接口
        源码:
            构造器参数:空参,字符串常量,char数组(可有索引),byte数组(网络编程)        
            String 是final类,不能被继承
            源码看到底层是char/byte数组(value[])
                value[]是final,一旦创建不能修改(地址不能修改(字符串对象不能改,否则不是一个了),而不里面的字符不能修改)
        创建方式:
            1 直接赋值
                先看常量池中有没有,有,引用直接指向,没有,常量池创建后,引用指向,最终,引用都是指向常量池
            2 构造器创建  【相当于 用String对象包了一层】
                先在堆中创建空间,【引用指向堆】(堆中的空间有value属性,其查看常量池,有value直接指向,没有,常量池创建指向)
            但是注意:String类的equals方法是比较value数组的,所以为真(注意equals到底是object还是string)
                        ==就是比较地址了,是false
                        调用intern方法时,如果对象equals()方法 常量池中某对象,返回值是常量池地址,
                            否则,将其加入常量池,返回常量池地址
        字符串相加【面试题】
            string常量相加
                常量池常量对象有编译器优化的
            string变量相加
                创建一个空的StringBuilder对象-》调用其append方法到最后-》调用toString方法(new一个String对象返回)
                    所以相加返回的相对于是new构造器创建的对象string,堆中value指向常量池 
        常用方法:
            equals方法            不忽略
            equalsIgnoreCase    忽略大小写
            length    方法        返回长度int
            indexOf    方法        返回字符/字符串的最先索引  源码是KMP
            lastIndexOf方法        返回字符/字符串的最后索引  源码是KMP
            subString            截取字符串,返回string    左闭右开
            trim                去前后空格,返回string
            ChatAt                获取索引字符,不能用Str[index]获取
            
            toUpperCase            转大写
            toLowerCase            转小写
            concat                拼接,就是+号
            replace                返回值是替换字符串,替换所有,对于其本身没有影响
            split                返回字符串数组,对于地址符等特殊字符,字符串分割时,需要加入转义符\
            compareTo            一个个字符比,返回前-后的ASCII码,前者大,返回正数,后者大,返回负数;
                                    比到没得比,返回 让前面字符串总长度-后面字符串总长度
            toCharArray            转为字符数组
            format                格式化字符串 : %s表示字符串   %c字符    %d整型      %.2f浮点型,保留小数点后2位(四舍五入)
                                    返回格式好的字符串,第一个参数是带占位符的string,后面变量替换占位符
                                    (c语言形式:但是c语言不是四舍五入)
    StringBuffer
        代表可变的字符序列,buffer代表缓冲区
        java.lang.StringBuffer
        是一个容器,线程安全
        继承关系:
            父类是AbstractStringBuffer,父类实现了charSequence接口,Appendable接口,再父类是object类
            实现了Serializable接口,charSequence接口
        源码:
            其父类AbstractStringBuffer中有value[]属性,不是final类型,存放字符串内容,不是final,是存放在堆中的
            stringBuffer是final类
            构造器参数:空参,字符串(此构造器指定容量是当前字符串长度+16),指定缓冲区容量(默认16)
                构造器的参数不能是null,会抛空指针异常
            
        常用方法:
            append                            增,追加,返回的还是stringBuffer,【追加的如果是null,则会置null字符串(不会抛异常)】
            delete(start,end)            删,返回的还是stringBuffer,左闭右开
            replace(start,end,string)    改,左闭右开
            indexOf                            查第一次出现的索引
            insert(start,string)            插,在索引位置插入,后面往后移            应用:3位数字插入逗号(先找小数点,往前3位插,循环处理)
            length                            获取长度
        string与stringBuffer
            string是字符串常量,里面值不能改,每次string类更新其实是改地址,效率低(value[]是fianl的)
            stringBuffer保存的是字符串变量,里面的值可以修改,每次是更新内容,不用每次不用改地址,效率高(value[]在堆中)
                只有value指向的数组(也在堆中)不够,才更新地址(扩大,拷贝,更新)
            相互转换:
                string-》stringBuffer
                    stringBuffer构造器
                    stringBuffer的append方法
                stringBuffer-》string
                    stringBuffer的toString方法
                    使用String构造器
            string类效率较低,复用常量池,复用率很高,如果对string做大量修改,用buffer或builder
            stringbuilder与stringBuffer提高效率:配置文件string表示常量的值
    StringBuilder
        【stringBuffer的替代】,但是所有方法都不是线程安全的(不保证同步),效率最高
            【单线程】使用,优先使用此类,因为比stringBuffer快
        是final类
        主要操作append与insert方法,可以重载这些方法,接收任意类型数据
        继承关系:与stringBuffer一样
            父类是AbstractStringBuilder,父类实现了charSequence接口,Appendable接口,再父类是object类
            实现了Serializable接口,charSequence接口
    Math
        数学运算的static方法
        abs            绝对值
        pow            求幂
        ceil        向上取整
        floor        向下取整
        round        四舍五入
        sqrt        求开方,负数是NAN
        random        求随机数    [0,1)随机小数   多敲,搞清楚【a,b】随机数写法
        max            两数最大
        min            两数最小
    
    Arrays
        static方法,管理和操作数组(比如排序和搜索)/包装类数组/引用类型数组
        Arrays有静态内部类arraylist,NaturalOrder,LagacyMergeSort
        
        toString方法,返回数组的字符串形式
        sort方法(自然排序和定制排序),数组是引用类型,排序会直接影响到参数
            定制排序要传递comparator接口参数 源码程序调用程序员实现的方法,拿到返回值,根据正负,决定 二叉树排序逻辑
        binarySearch 通过二分搜索 进行查找,要求必须排好序
        copyOf(arr,int x)拷贝原数组前x个元素到新数组,如果负数,抛异常,如果长度大于原数组,补null
        fill(arr,int x)数组元素的填充(使用后面数,替换原来所有数)
        equals(arr,arr)元素完全一样,返回真
        asList将一组值转换为list,编译类型是List,运行类型是arraylist(静态内部类)
        
    System
        exit退出当前程序,参数代表状态,0代表正常退出
        arraycopy复制数组元素,一般是底层调用才用 (我们一般用的arrays.copyOf就是用的它)  
                    参数5个,原数组,原数组起始位置,目的数组,目的数组起始位置,长度,出错报异常
        gc垃圾回收
        currentTimeMills返回当前时间毫秒数
        println方法,默认调用toString方法
        
    BigInteger,BigDecimal
        底层就是将其当作字符串处理,再转为对象
        保存比较大的整数(long存不下),保存精度高的浮点型(小数过多)
        构造器参数是字符串数字
        在对于bigInteger/bigDecimal  +,-,*,/有专门方法,不能用符号,
            bigDecimal的除法可能抛异常(精度太高,可能除不尽)--》在除法方法多传一个BigDecimal的静态变量作为精度(保留分子精度)
        
    Date,Calendar,localDate 3代发展
        jdk1.0
        Date构造器无参/毫秒值    getTime方法获得毫秒值
        SimpleDateFormat格式化  构造器传字符串   format方法/parse方法(parse有异常的)
        
        jdk1.1
        Calendar是抽象类,getInstance静态方法获取对象并且提供大量方法和字段给我们使用
        没有专门格式化方法。要自己组合
        线程不安全,还不能处理闰秒(每2天,多1秒)
        
        jdk8
        localDate,localTime,localDateTime
            日期     时分秒        都有
            now方法获取当前对象,getXXX(VALUE)方法获取字段,
            检测是否是闰年等,加/减一个时间(890天后等)得到新日期等各种方法
        DateTimeFormater格式化类似simpleDateFormat
        Instant时间戳类,now方法可以获取当前时间,可以与Date相互转换兼容

    比较器
    comparable接口是给类实现的
        里面的compareTo方法 有1参数,表示自己this与其他自己的比较o  方法返回值是int
        将比较逻辑的正负值与返回值的正负值有所关联就行
    comparator接口是当参数的
        里面的compare方法主要   接口当作参数时,匿名内部类重写的方法 ,有2参数,表示自己与其他自己(o1,o2) 
        方法返回值是int

相关文章:

常用类与比较器

常用类 学一个类,先搞清楚继承关系,再看源码 包装类Wrapper jdk5之前是手动装箱拆箱 jdk5及之后是自动装箱拆箱(调用valueOf方法(自动默认)/创建对象的构造方法,XXXvalue方法…...

【上海大学《面向对象程序设计A》课程小项目报告】抽象向量类模板及其派生类

1 项目内容及要求 本项目通过设计一个抽象向量类模板,以及一个通用的向量类模板和一个字符串类作为其派生类,以满足各种应用场景中的数据存储和处理需求。 项目内容: 抽象向量类模板。派生向量类。派生字符串类。测试及异常处理。联合测试…...

Leetcode每日一题学习训练——Python3版(到达首都的最少油耗)

版本说明 当前版本号[20231205]。 版本修改说明20231205初版 目录 文章目录 版本说明目录到达首都的最少油耗理解题目代码思路参考代码 原题可以点击此 2477. 到达首都的最少油耗 前去练习。 到达首都的最少油耗 ​ 给你一棵 n 个节点的树(一个无向、连通、无环…...

Java面试题(每天10题)-------连载(42)

目录 Spring篇 1、Spring Bean的作用域之间有什么区别? 2、什么是Spring inner beans? 3、Spring框架中的单例Beans是线程安全的吗? 4、请举例说明如何在Spring中诸如一个Java Collection? 5、如何向Spring Bean中诸如一个J…...

netty websocket学习

【硬核】肝了一月的Netty知识点 超详细Netty入门,看这篇就够了! bzm_netty_sb netty-chat vuewebsokect实现实时聊天,可单聊、可群聊(一) vue实现聊天栏定位到最底部(超简单、可直接复制使用)…...

【数据结构】环形队列

环形队列 1. 定义 环形队列就是将队列在逻辑上看作环形结构、物理上仍是数组形式存储的一种数据结构。 其实现主要分为两种情况: 浪费空间法记录空间法 2. 实现 实现要考虑的是成员变量 2.1 记录空间法 使用used标识当前存储了多少元素,如果为空&a…...

嵌入式C编码规范

嵌入式C编码规范 编码规范,没有最好,只有最合适,有但不执行不如没有。 嵌入式C编码规范 https://mp.weixin.qq.com/s/z4u3YnF6vdQ1olsLeF-y_A 更多嵌入式信息请关注微信公众号【嵌入式系统】...

Golang 并发 — 流水线

并发模式 我们可以将流水线理解为一组由通道连接并由 goroutine 处理的阶段。每个阶段都被定义为执行特定的任务,并按顺序执行,下一个阶段在前一个阶段完成后开始执行。 流水线的另一个重要特性是,除了连接在一起,每个阶段都使用…...

Elasticsearch:什么是非结构化数据?

非结构化数据定义 非结构化数据是指未按照设计的模型或结构组织的数据。 非结构化数据通常被归类为定性数据,可以是人类或机器生成的。 非结构化数据是最丰富的可用数据类型,经过分析后,可用于指导业务决策并在许多其他用例中实现业务目标。…...

15:00的面试,15:06就出来了,问的问题过于变态了。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...

Web自动化测试怎么做?Web网页测试全流程解析

1、功能测试 web网页测试中的功能测试,主要测试网页中的所有链接、数据库连接、用于在网页中提交或获取用户信息的表单、Cookie 测试等。 (1)查看所有链接: 测试从所有页面到被测特定域的传出链接。 测试所有内部链接。 测…...

MySQL数据库SQLSTATE[22007]: Invalid datetime format 日期类型不能为空值的解决办法

如果你的数据库是mysql, 如果你创建表或插入数据时遇到的BUG–它长这样: Invalid datetime format: 1292 Incorrect datetime value: ‘’ for column ‘xxx’ at row 1 或 1067 - Invalid default value for ‘xx’ 那么我将赐予你 两套剑法: &#…...

搬运工让你分分钟了解Web接口测试

01、什么是接口 百度说:接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式 上面这句有点抽象,网上的…...

作业12.5

1.定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std; class Animal { private:int weight; public:Animal(){}Animal(int weight):weight(weight){}virtual …...

leetCode 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] 输出&#xff1a;[[1,2,3],[1,3,2…...

Maya 2024(3D建模、动画和渲染软件)

Maya 2024是一款非常强大的3D建模、动画和渲染软件&#xff0c;它提供了许多新功能和改进&#xff0c;以帮助建模师、动画师和渲染师更加高效地进行创作。 在建模方面&#xff0c;Maya 2024引入了Symmetry&#xff08;对称&#xff09;功能&#xff0c;可以在网格两侧生成均匀…...

C++作业5

完成沙发床的多继承&#xff08;有指针成员&#xff09; 代码&#xff1a; #include <iostream>using namespace std;class Bed { private:double *money; public:Bed(){cout << "Bed::无参构造函数" << endl;}Bed(double money):money(new doub…...

Go语言很难吗?为什么 Go 岗位这么少?

其实这个话题已经躺在我的 TODO 里很久了&#xff0c;近来很多社区的小伙伴都私下来交流&#xff0c;也有在朋友圈看吐槽 Go 上海的大会没什么人。还不如 Rust 大会&#xff0c;比较尴尬。 今天主要是从个人角度看看为什么 Go 岗位看起来近来很难的样子&#xff1f; 盘一下数…...

为什么要替换 Object.defineProperty?

目录 前言&#xff1a;为什么要替换 Object.defineProperty&#xff1f; 详解&#xff1a;为什么要替换 Object.defineProperty&#xff1f; 总结&#xff1a; 前言&#xff1a;为什么要替换 Object.defineProperty&#xff1f; JavaScript中的Object.defineProperty是一种…...

百马百担c语言编程

以下是一个百马百担问题的C语言编程实现&#xff1a; #include <stdio.h>int main() { int n, m, k; scanf("%d%d%d", &n, &m, &k); int a[n], b[m], c[k]; for (int i 0; i < n; i) { scanf("%d", &a[i]);…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段&#xff1a; 构建阶段&#xff08;Build Stage&#xff09;&#xff1a…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...