java常见类库
StringBuffer类
String和StringBuffer的区别
String
-
不可变性:
String类是不可变的,这意味着一旦创建了一个String对象,其值就不能改变。每次对String进行修改(如连接、替换等操作)都会产生新的String对象,原来的对象不会被改变。 -
线程安全性:由于
String的不可变性,它是线程安全的,可以被多个线程共享而无需担心数据一致性的问题。 -
性能:因为每次修改都会创建新的对象,所以在频繁进行字符串操作时,
String的效率较低。
StringBuffer
-
可变性:
StringBuffer是一个可变的字符序列,可以被多次修改而不创建新的对象。这意味着如果需要对字符串进行大量的修改操作,使用StringBuffer比使用String更加高效。 -
线程安全性:
StringBuffer是线程安全的。它的方法都是同步的(即加了synchronized关键字),这使得StringBuffer可以在多线程环境中安全地使用,但是也导致了它的性能相比非线程安全的StringBuilder要差一些。 -
性能:当需要在一个单线程环境下进行大量字符串操作时,
StringBuffer仍然不是最优选择,因为它的线程安全特性会带来额外的开销。在这种情况下,应该考虑使用StringBuilder。
使用场景
-
使用
String:当你不需要修改字符串内容时,或者修改次数非常少的时候,使用String是合适的。此外,String的不可变性和线程安全性使其成为多线程环境中的首选。 -
使用
StringBuffer:如果你的应用程序需要在多线程环境中频繁地修改字符串,那么StringBuffer是一个很好的选择,因为它提供了线程安全的操作。 -
使用
StringBuilder:对于单线程环境下的频繁字符串操作,推荐使用StringBuilder,因为它比StringBuffer性能更高,同时又保持了可变性的优点。
StringBuffer介绍
String类自身有一个最大的缺陷:内容一旦声明则不可改变,JDK为了方便用户修改字符串内容提供了StringBuffer类
StringBuffer类不像String类那样可以直接通过声明字符串常量方式进行实例化,而是必须像普通类对象使用一样,首先通过构造方法进行对象实例化,而后才可以调用方法进行处理。
| No. | 方法 | 类型 | 描述 |
|---|---|---|---|
| 1 | public StringBuffer() | 构造 | 创建一个空的StringBuffer对象 |
| 2 | public StringBuffer(String str) | 构造 | 将接受到的String内容变为StringBuffer内容 |
| 3 | public StringBuffer append(数据类型 变量) | 普通 | 内容连接,等价于String中:”+”操作 |
| 4 | public StringBuffer insert(int offset,数据类型 变量) | 普通 | 在指定索引位置处插入数据 |
| 5 | public StringBuffer delete(int start,int end) | 普通 | 删除指定索引范围之内的数据 |
| 6 | public StringBuffer reverse() | 普通 | 内容反转 |
示例
public class JavaDome{public static void main(String args[]){StringBuffer buf = new StringBuffer("hello");change(buf);String data = StringBuffer.toString(); //将StringBuffer变为String实例System.out.println(data);}
}
public static void change(StringBffer temp){temp.append("world").append("!");
}
实际上使用:
String strB = "hello"+"world"+"!"
程序编译后的结果全部等价于以下操作:
StringBuffer buf = new StringBuffer();
buf.append("hello").append("world").append("!");
所有的"+"编译之后都变成了StringBuffer中append()方法
除了可以修改内容的能力外,还提供了一些String类所不具备的方法
插入删除数据
StringBuffer buf = new StringBuffer();
buf.append("hello world").delete(6,12).insert(6,"!");
字符串反转
StringBuffer buf = new StringBuffer();
buf.append("hello");
System.out.println(buf.reverse());
CharSequence接口
常见子类
String、StringBuffer、StringBuilder
常见的方法
| No. | 方法 | 类型 | 描述 |
|---|---|---|---|
| 1 | public char charAt(int index) | 普通 | 获取指定索引字符 |
| 2 | public int length() | 普通 | 获取字符串长度 |
| 3 | public CharSequence subSequence(int start,int end) | 普通 | 截取部分字符串 |
使用示例
CharSequence str = "hello";
//子类实例向父类接口转型
CharSequence sub = str.subSequence(4,8);
//截取部分子字符串
//String类是CharSequence接口子类,所以本程序利用对象向上转型的操作通过字符串的匿名对象实现了CharSequece父接口对象实例化,随后调用subSequence()方法实现了子字符串的截取操作
注:
开发中优先考虑String类,只有在频繁操作修改这一操作中才会考虑使用StringBuffer或StringBuilder
AutoCloseable接口
该接口的主要功能是结合异常处理结构在资源操作完成后实现自动释放功能
public interface AutoCloseale{public void close() throws Exception;//资源释放
}
Runtime类
Runtime描述的是运行时的状态,在每一个JVM进程中都会提供唯一的一个Runtime类实例化对象。
可以利用Runtime类对象获取与JVM有关的运行时状态。
由于Runtime类中只存在一个实例化对象,所以在Runtime类中默认将默认将其构造方法封装(单例设计模式),这样就必须用Runtime类中提供的getRuntime()方法(为static方法)来获取实例化对象,随后就可以获取一些系统相关的信息。
| No. | 方法 | 类型 | 描述 |
|---|---|---|---|
| 1 | public static Runtime getRuntime() | 普通 | 获取Rintime类的实例化对象 |
| 2 | public int avaliableProcessors() | 普通 | 获取可用的CPU处理器数量 |
| 3 | public long maxMemory() | 普通 | 取得最大可用内存量 |
| 4 | public long totalMemory() | 普通 | 取得总共可用内存量 |
| 5 | public long freeMemory() | 普通 | 取得空闲内存量 |
| 6 | public void gc() | 普通 | 运行垃圾收集器,释放垃圾空间 |
获取本机CPU处理器数量
public class JavaAPIDemo{public static void main(String args) throws Exception{Runtime runtime = Runtime.getRuntime(); //获取Runtime实例化对象System.out.println(runtime.avaliableProcessors()); //获取处理器数量}
}
注: long型数据主要有两种情况,表示文件大小和表示日期时间
System类
| No. | 方法 | 类型 | 描述 |
|---|---|---|---|
| 1 | public static void arraycopy(Object src,int srcPos,Object destPos,int length) | 普通 | 数组复制操作 |
| 2 | public static long currentTimeMillis() | 普通 | 取得当前的日期时间,以long型数据返回 |
| 3 | public static void gc() | 普通 | 执行GC操作 |
Cleaner类
在java中对象的整个生命周期大致可以分为七个阶段:
创建阶段(Created)
应用阶段(In Use)
不可见阶段(Invisible)
不可达阶段(Unreachable)
收集阶段(Collected)
终结阶段(Finalized)
释放阶段(Free)
Math数学计算
程序开发本质就是数据处理,java提供有java.lang.Math类来帮助开发者进行常规的数学计算处理。
例如,四舍五入,三角函数,乘方处理等
Math.abs(-10.9) //绝对值 10.9
Math.max(10.2,20.3) //获取最大值
Math.log(5) //对数:1.60943...
Math.round(15.1) //四舍五入 15
Math.round(-15.5) //四舍五入 -15
Math.round(-15.51) //四舍五入 -16
Math.pow(10.2,20.2) //乘方:2.36441...
Rondom随机数
import java.util.Random
设置一个随机数的范围边界就可以随机生成不大于此边界范围的正整数
方法(随机生成正整数):public int nextInt(int bound)
Random rand = new Random();
rand.nextInt(100);
大数字处理类
BigInteger
| No. | 方法 | 类型 | 描述 |
|---|---|---|---|
| 1 | public BigInterger(String val) | 构造 | 将一个字符串变成BigInterger类型数据 |
| 2 | public BigInterger add(BigInterger val) | 普通 | 加法计算 |
| 3 | public BigInterger substract(BigInterger val) | 普通 | 减法计算 |
| 4 | public BigInterger multiply(BigInterger val) | 普通 | 乘法计算 |
| 5 | public BigInterger divideBigInterger val) | 普通 | 除法计算 |
| 6 | public BigInterger max(BigInterger val) | 普通 | 返回两个大数字中的最大值 |
| 7 | public BigInterger min(BigInterger val) | 普通 | 返回两个大数字的最小值 |
| 8 | public BigInteger[] divideAndRemainder(BigInterger val) | 普通 | 除法操作,数组的第一个元素为除法的商,第二个元素为除法的余数 |
BigDecimal
| No. | 方法 | 类型 | 描述 |
|---|---|---|---|
| 1 | public BigDecimal(double val) | 构造 | 将double表示形式转换为BigDecimal |
| 2 | public BigDecimal(int val) | 构造 | 将int表示形式转换为BigDecimal |
| 3 | public BigDecimal(String val) | 构造 | 将字符串表示形式转换为BigDecimal |
| 4 | public BigDecimal add(BigDecimal augend) | 普通 | 加法计算 |
| 5 | public BigDecimal subtract(BigDecimal subtrahend) | 普通 | 减法计算 |
| 6 | public BigDecimal multiply(BigDecimal multiplicand) | 普通 | 乘法计算 |
| 7 | public BigDecimal divide(BigDecimal divisor) | 普通 | 除法计算 |
| 8 | public BigDecimal divide(BigDecimal divisor,int scale,RoundingMode roundingMode) | 普通 | 除法计算设置保留下小数位与进位模式 |
Date日期处理类
| No. | 方法 | 类型 | 描述 |
|---|---|---|---|
| 1 | public Date() | 构造 | 实例化Date对象 |
| 2 | public Date(long date) | 构造 | 将数字变为Date类对象,long为日期时间数据 |
| 3 | public long getTime() | 普通 | 将当前的日期时间变为long型 |
SimpleDateForrmat日期格式化
正则表达式
Arrays数组操作类
import java.util.Arrays
public class JavaApIDemo{public static void main(String[] args) throws Exception{int dataA[] = new int[] {1,2,3};int dataB[] = new int[] {1,2,3};System.out.println(Arrays.compare(dataA,dataB));System.out.println(Arrays.equals(dataA,dataB));int data[]C = new int[10];Arrays.fill(dataC,3); //内容填充System.out.println(Arrays.toString(dataC)); //数组转为字符串输出}
}
| No. | 方法 | 类型 | 描述 |
|---|---|---|---|
| 1 | public static void sort(数据类型[] 变量) | 普通 | 数组排序 |
| 2 | public static int binarySearch(数据类型[] 变量,数据类型 key) | 普通 | 利用二分查找算法进行数据查询 |
| 3 | public static int compare(数据类型[] 变量,数据类型[] 变量) | 普通 | 比较两个数组的大小,返回3类结果:大于(1)、小于(-1)、等于(0) |
| 4 | public static boolean equals(数据类型[] 变量,数据类型[] 变量) | 普通 | 数组相等判断 |
| 5 | public static void fill(数据类型[] 变量,数据类型 变量) | 普通 | 数组填充 |
| 6 | public static String toString(数据类型[] 变量) | 普通 | 数组转为字符串 |
异常结构

以后慢慢遇到再补充吧!
相关文章:
java常见类库
StringBuffer类 String和StringBuffer的区别 String 不可变性:String 类是不可变的,这意味着一旦创建了一个 String 对象,其值就不能改变。每次对 String 进行修改(如连接、替换等操作)都会产生新的 String 对象&…...
Wordly Wise 3000 国际背单词01 介绍 + 测词汇量
📚 Wordly Wise 3000 国际背单词01 介绍 测词汇量 🌟 大家好!我们正式启动背Wordly Wise 3000单词,旨在利用国际资源和科学的学练方法,帮助大家更得效地坚持学练单词。我们将通过图文和Video等多种形式与大家分享经验…...
Unity Dots理论学习-2.ECS有关的模块(1)
Unity的实体组件系统(ECS)是支撑DOTS模块和技术的面向数据架构。ECS为Unity中的内存数据和runtime进程调度提供了高度的控制和确定性。 ECS for Unity 2022 LTS 配备了两个兼容的物理引擎,一个高级的Netcode package,以及一个用来…...
2021.12.28基于UDP同信的相关流程
作业 1、将TCP的CS模型再敲一遍 服务器 #include <myhead.h> #define PORT 8888 #define IP "192.168.124.123" int main(int argc, const char *argv[]) {//创建套接字//绑定本机IP和端口号//监听客户端请求//接收客户端连接请求//收发消息//创建套接字int…...
使用 Docker 搭建 Hadoop 集群
1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接:Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接:Docker Desktop release notes | Do…...
optuna和 lightgbm
文章目录 optuna使用1.导入相关包2.定义模型可选参数3.定义训练代码和评估代码4.定义目标函数5.运行程序6.可视化7.超参数的重要性8.查看相关信息9.可视化的一个完整示例10.lightgbm实验 optuna使用 1.导入相关包 import torch import torch.nn as nn import torch.nn.functi…...
Android 设置铃声和闹钟
Android设置铃声和闹钟使用的方法是一样的,但是要区别的去获取对应的权限。 统一权限,不管是设置闹钟还是铃声,他们都需要一个系统设置权限如下: //高版本需要WRITE_SETTINGS权限//此权限是敏感权限,无法动态申请,需要…...
自动化测试模型(一)
8.8.1 自动化测试模型概述 在自动化测试运用于测试工作的过程中,测试人员根据不同自动化测试工具、测试框架等所进行的测试活动进行了抽象,总结出线性测试、模块化驱动测试、数据驱动测试和关键字驱动测试这4种自动化测试模型。 线性测试 首先&#…...
解决nuxt3下载慢下载报错问题
在下载nuxt3时总是下不下来,最后还报错了。即使改成国内镜像源也不行。 解决方法: 直接去github上下载 https://github.com/nuxt/starter/tree/v3 解压后得到如下目录: 手动修改项目名和文件夹名 安装依赖 npm install可能会比较慢或下不…...
Ubuntu修改swap大小
查看swap位置和大小: swapon -s 方案一:修改原有文件大小方式 第一步:进入系统根目录cd /; 第二步:执行:sudo dd if/dev/zero of/swap bs1M count16384 //每段块1M 共16384块,即16G 第三步:执行…...
[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)
文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步:计算 (a*c) (-b*d)i2.1.4 第2步:计算 (a*d) (b*c)i2.1.5 第3步:计算结果合并 2.2 算法实现(UseVectors)2.…...
C#WPF基础介绍/第一个WPF程序
什么是WPF WPF(Windows Presentation Foundation)是微软公司推出的一种用于创建窗口应用程序的界面框架。它是.NET Framework的一部分,提供了一套先进的用户界面设计工具和功能,可以实现丰富的图形、动画和多媒体效果。 WPF 使用…...
强大的接口测试可视化工具:Postman Flows
Postman Flows是一种接口测试可视化工具,可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API,数据可视化来显示…...
系统设计及解决方案
发送验证码 1:根据手机号从Redis中获取value(验证码_时间戳) 2:如果value不为空,并且时间戳与当前时间戳的间隔小于60秒,则返回一个错误信息 3:生成随机验证码 4:调用阿里云短信服务API给用户发送短信验证码…...
从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】
1. 常用资料以及官方网站 无人机飞控PX4用户使用手册(无人机基本设置、地面站使用教程、软硬件搭建等):https://docs.px4.io/main/en/ PX4固件开源地址:https://github.com/PX4/PX4-Autopilot 飞控硬件、数传模块、GPS、分电板等…...
Linux之ARM(MX6U)裸机篇----2.汇编LED驱动实验
一,alpha的LED灯硬件原理分析 STM32 IO初始化流程 ①,使能GPIO时钟 ②,设置IO复用,复用为GPIO ③,配置GPIO的电气属性推挽,上拉下拉 ④,使用GPIO,输出高/低电平 MX6ULL IO初始化…...
e3 1220lv3 cpu-z分数
e3 1220lv3 双核四线程,1.1G频率,最低可在800MHZ运行,TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。...
HTML5适配手机
要使 HTML5 网站适配手机设备,您可以遵循以下几个步骤和最佳实践: 1. 使用视口(Viewport) 在 HTML 文档的 <head> 部分添加视口元标签,以确保页面在移动设备上正确缩放和显示: <meta name"…...
C# 中使用 MassTransit
在生产环境中使用 MassTransit 时,通常需要进行详细的配置,包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例,展示了如何在 ASP.NET Core 应用程序中配置 MassTransit,包括请求/响应模式和…...
网络编程 实现联网 b+Tree
网络编程是客户端和服务器之间通信的基础,也是现代应用开发中不可或缺的技能。在 Unity 中实现网络功能,需要结合计算机网络原理、数据结构与算法,以及网络协议的实际应用。以下是对这一块内容的详细介绍,包括每个涉及到的知识点&…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
