常用类与比较器
常用类
学一个类,先搞清楚继承关系,再看源码
包装类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,其中有一个虛函数perform(),用于在子类中实现不同的表演行为。 #include <iostream>using namespace std; class Animal { private:int weight; public:Animal(){}Animal(int weight):weight(weight){}virtual …...
leetCode 47. 全排列 II + 回溯算法 + 图解 + 笔记
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]] 示例 2: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2…...
Maya 2024(3D建模、动画和渲染软件)
Maya 2024是一款非常强大的3D建模、动画和渲染软件,它提供了许多新功能和改进,以帮助建模师、动画师和渲染师更加高效地进行创作。 在建模方面,Maya 2024引入了Symmetry(对称)功能,可以在网格两侧生成均匀…...
C++作业5
完成沙发床的多继承(有指针成员) 代码: #include <iostream>using namespace std;class Bed { private:double *money; public:Bed(){cout << "Bed::无参构造函数" << endl;}Bed(double money):money(new doub…...
Go语言很难吗?为什么 Go 岗位这么少?
其实这个话题已经躺在我的 TODO 里很久了,近来很多社区的小伙伴都私下来交流,也有在朋友圈看吐槽 Go 上海的大会没什么人。还不如 Rust 大会,比较尴尬。 今天主要是从个人角度看看为什么 Go 岗位看起来近来很难的样子? 盘一下数…...
为什么要替换 Object.defineProperty?
目录 前言:为什么要替换 Object.defineProperty? 详解:为什么要替换 Object.defineProperty? 总结: 前言:为什么要替换 Object.defineProperty? JavaScript中的Object.defineProperty是一种…...
百马百担c语言编程
以下是一个百马百担问题的C语言编程实现: #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]);…...
边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
负载均衡器》》LVS、Nginx、HAproxy 区别
虚拟主机 先4,后7...
深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...
