Java常用类和基础API

news2024/10/6 7:39:02

我是南城余!阿里云开发者平台专家博士证书获得者!

欢迎关注我的博客!一同成长!

一名从事运维开发的worker,记录分享学习。

专注于AI,运维开发,windows Linux 系统领域的分享!

本章节对应知识库:

常用类和基础API (yuque.com) 


尚硅谷_宋红康_String的内存结构.pptx

Java API查看 参考网站

Java SE 文档 — API 和文档 | Oracle 中国

Java 8 中文版 - 在线API手册 - 码工具

方法参数的值传递机制

基本数据类型传递的是数值,引用数据类型传递的是地址值

String类

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence

final :凡是final修饰的,不可被修改,所以String是不可被继承的

Serializable:可序列化的接口,凡是实现此接口的类的对象就可以通过网络或在本地流进行数据的传输

Comparable:凡是实现此接口的类,其对象都可以比较大小

字符串常量的存储位置

>字符串都存储在字符串常量池(StringTable)中

>字符串常量池不允许存放两个相同的字符串常量

>字符串常量池,在不同的jdk版本中,存放的位置不同

jdk7之前:存放在方法区

jdk7及以后:存放在堆空间中

String的不可变性理解

》当对字符串变量重新赋值时,需要重新指定一个字符串常量的位置进行赋值,不能在原有的位置修改

》当对现有字符串进行拼接时,需要重新开辟空间保存拼接后的字符串,不能在原有的位置修改

》当调用字符串的replace()替换现有的某个字符时,需要重新可开票空间保存修改以后的字符串,不能在原有的位置修改

String s2 = new String("hello");在内存中创建了两个对象

一个是堆空间中new的对象,另一个是字符串常量池中生成的字面量

String的连接操作:+

情况1:常量+常量:结果仍然存储在字符串常量池中,返回此字面量的地址 注:此时的常量可能是字面量或者final修饰的常量

情况2 : 常量 + 变量 或 变量+ 变量 :都会通过new的方式创建一个新的字符串,返回堆空间中此字符串对象的地址

情况3 :调用字符串的intern():返回的是字符串常量池中的字面量的地址

concat():不管是常量调用此方法,还是变量调用,同样不管是常量还是变量,总之,调用完,都返回一个新new的对象

基本数据类型与引用数据类型间的转换
//基本数据类型转换引用数据类型
int num = 10;
//方式1:
String s1 = num + "";

//方式2: valueOf()
String s2 = String.valueOf(num);

//引用数据类型转换基本数据类型:调用包装类的parssexxx(String str)
String s3 = "11230";
int num1 = Integer.parseOf(s3);

编码、解码

编码:字符、字符串——>字节、字节数组(对应着编码集)

解码:字节、字节数组——>字符、字符串(对应着解码集)

StringBuffer和StringBuilder中常用的方法

增:

append()

删:

delete(int start, int end)

deleteCharAt(int index)

改:

setCharAt(int index,char c)

replace(int start,int end,String str)

查:

charAt(int index)

插:

insert(int index,xx)

长度:

length()

String、StringBuffer、StringBulider使用场景

在Java中,String、StringBuffer和StringBuilder是处理字符串的常用类。它们之间有一些重要的区别,包括线程安全性和可变性。这里将解释每个类以及它们的使用场景。

  1. String:String类是不可变的,这意味着一旦创建了一个字符串,就不能更改它的值。如果尝试改变字符串中的某些字符,那么会创建一个新的字符串。因此,当需要多个修改字符串的操作时,String可能不是最佳选择,因为它会产生大量的中间字符串。例如,在一系列字符串连接操作中使用String会导致大量不必要的字符串创建和垃圾回收。
  2. StringBuffer:StringBuffer是可变的,可以在原地修改字符串,而不会创建新的字符串。因此,StringBuffer适用于需要频繁修改字符串的场景,例如在字符串拼接、字符串替换、字符串截取等操作中。此外,StringBuffer是线程安全的,这意味着在多线程环境中使用StringBuffer是安全的。
  3. StringBuilder:StringBuilder和StringBuffer类似,都是可变的,可以在原地修改字符串。然而,StringBuilder不是线程安全的。因此,在单线程环境中,StringBuilder通常比StringBuffer更快,因为它没有进行线程安全的同步操作。因此,如果不需要考虑多线程环境,建议使用StringBuilder而不是StringBuffer。

总结起来,String、StringBuffer和StringBuilder的使用场景如下:

  • 如果需要一个不可变的字符串,可以使用String。
  • 如果需要频繁修改字符串并且需要线程安全,可以使用StringBuffer。
  • 如果需要频繁修改字符串但是在单线程环境中,可以使用StringBuilder。

日期、时间API

jdk8之前的

》System的currentTimeMills()

》两个Date的使用

》SimpleDateFormat用于格式化、解析

》Calendar日历类的使用

jdk8

LocalDate、LocalTime、LocalDateTime—》类似于Calendar

》Instant——》类似于Date

》DateTimeFormater——》类似于SimpleDateFormat

Java比较器

自然排序:实现Comparaable接口的方式

》具体类A实现Comparable接口

》重写Comparable接口的compareTo(object obj)方法,在此方法中指明比较类A对象的大小标准

》创建类A的多个实例,进行大小的比较或排序

定制排序:实现Comparator接口

》创建一个实现Comparator接口的实现类A

》实现类A要求重写Comparator接口中的抽象方法compare(Object o1,Object o2),在此方法中指明要比较大小的对象的大小关系

》创建此实现类A的对象,并将此对象传入相关方法的参数位置即可。

两种接口对比

自然排序:单一的,唯一的 对应的接口是Comparable,对应的抽象方法compareTo(Object obj)

定制排序:灵活的,多样的,对应的接口是Comparator,对应的抽象方法compare(Object obj1,Object obj2)

sort()方法排序

Java中的sort()方法是用于对数组或列表进行排序的。它来自java.util.Arrays类或java.util.Collections类,可以对基本数据类型和对象数组进行排序。

具体来说,Java中的sort()方法使用一种称为归并排序的稳定排序算法,该算法是采用分治法的一种高效、稳定、简单的排序算法。它将待排序的数据分割成若干个子序列,分别进行排序,最终合并成一个有序的序列。

sort()方法的使用方式如下:

  1. 对于基本数据类型数组,可以使用Arrays.sort()方法进行排序,例如:
int[] arr = {3, 1, 4, 1, 5, 9};
Arrays.sort(arr);

  1. 对于对象数组或列表,可以使用Collections.sort()方法进行排序,例如:
List<String> list = Arrays.asList("C", "A", "B");
Collections.sort(list);

需要注意的是,如果要自定义排序规则,可以实现Comparator接口,并将其作为sort()方法的第二个参数传递。例如,如果要按照字符串长度进行排序,可以这样写:

List<String> list = Arrays.asList("C", "ABC", "AB", "A");
Collections.sort(list, new Comparator<String>() {
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
});

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

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

相关文章

Spark SQL 每年的1月1日算当年的第一个自然周, 给出日期,计算是本年的第几周

一、问题 按每年的1月1日算当年的第一个自然周 (遇到跨年也不管&#xff0c;如果1月1日是周三&#xff0c;那么到1月5号&#xff08;周日&#xff09;算是本年的第一个自然周, 如果按周一是一周的第一天) 计算是本年的第几周&#xff0c;那么 spark sql 如何写 ? 二、分析 …

蓝桥杯 插入排序

插入排序的思想 插入排序是一种简单直观的排序算法&#xff0c;其基本思想是将待排序的元素逐个插入到已排序序列 的合适位置中&#xff0c;使得已排序序列逐渐扩大&#xff0c;从而逐步构建有序序列&#xff0c;最终得到完全有序的序 列。 它类似于我们打扑克牌时的排序方式&…

缅因州政府通知130万人MOVEit数据泄露事件

大家好&#xff0c;今天我要向大家通报一个令人震惊的消息&#xff1a;缅因州政府的系统遭到了入侵&#xff0c;黑客利用MOVEit文件传输工具的漏洞&#xff0c;获取了约130万人的个人信息&#xff0c;这几乎相当于该州的整个人口数量。 MOVEit攻击是Clop勒索软件团伙进行的一次…

数据结构(超详细讲解!!)第二十三节 树型结构

1.定义 树型结构是一类重要的非线性数据结构&#xff0c;是以分支关系定义的层次结构。是一种一对多的逻辑关系。 树型结构是结点之间有分支&#xff0c;并且具有层次关系的结构&#xff0c;它非常类似于自然界中的树。树结构在客观世界中是大量存在的&#xff0c;例如家谱、…

nginx代理docker容器服务

场景描述 避免暴力服务端口&#xff0c;使用nginx代理 一个前端&#xff0c;一个后端&#xff0c;docker方式部署到服务器&#xff0c;使用docker创建的nginx代理端口请求到前端端口 过程 1 docker 安装nginx 1.1 安装一个指定版本的nginx docker pull nginx#启动一个ngi…

【MySQL】对表结构进行增删查改的操作

表的操作 前言正式开始建表查看表show tables;desc xxx;show create table xxx; 修改表修改表名 rename to对表结构进行修改新增一个列 add 对指定列的属性做修改 modify修改列名 change 删除某列 drop 删除表 drop 前言 前一篇讲了库相关的操作&#xff0c;如果你不太懂&…

麒麟信安:助力医疗行业操作系统自主创新,提升可靠性与安全性

应用场景 湖南省康复医院是省卫生健康委直属公立三级康复医院&#xff0c;也是全省唯一一所集预防、医疗、康复、科研、教学、健康管理为一体的省级三级公立康复医院。 湖南省康复医院使用的医慧管平台由湖南蓝途方鼎科技有限公司开发&#xff0c;利用互联网技术&#xff0c;…

好题分享(2023.11.5——2023.11.11)

目录 前情回顾&#xff1a; 前言&#xff1a; 题目一&#xff1a;补充《移除链表元素》 题目二&#xff1a;《反转链表》 解法一&#xff1a;三指针法 解法二&#xff1a;头插法 题目三&#xff1a; 《相交链表》 题目四&#xff1a;《合并两个有序数列》 题目五&…

vmware 修改主机名称 hadoop 服务器环境配置(一)

如何在虚拟机配置主机名称&#xff1a; 1. 如图所示在/etc 文件夹下有个hosts文件。追加映射关系&#xff1a; #关系 ip地址 名称 192.168.164.20 hadoop20 2. 保存后&#xff0c;重启reboot即可

炸裂!Sklearn 的 10 个宝藏级使用方法!

大家好&#xff0c;本次给大家介绍10个Sklearn方法&#xff0c;比较小众但非常好用。 1️.FunctionTransformer 虽然Sklearn中有很多内置的预处理操作可以放进pipeline管道&#xff0c;但很多时候并不能满足我们的需求。 如果是比较简单并且通过一个函数可以实现需求的情况&…

考前须知-2024年上半年系统集成项目管理工程师

可以看看23年下半年软考集成考试的难度 一、考试时间安排&#xff1a; 集成考试一年会考2次&#xff0c;上半年一次、下半年一次。考试时间4h&#xff0c;分批进行 系统集成项目管理工程师教材共655页&#xff0c;分为23章。其中,前3章为信息化与系统集成基础知识的内容,第4章…

4.5 构建onnx结构模型-Reshape

前言 构建onnx方式通常有两种&#xff1a; 1、通过代码转换成onnx结构&#xff0c;比如pytorch —> onnx 2、通过onnx 自定义结点&#xff0c;图&#xff0c;生成onnx结构 本文主要是简单学习和使用两种不同onnx结构&#xff0c; 下面以pow 结点进行分析 方式 方法一&am…

C语言之初阶指针

一、指针&#xff1a; 其实按照我的理解&#xff0c;当我们写c语言程序的时候&#xff0c;创建的变量&#xff0c;数组等都要在内存上开辟空间。而每一个内存都有一个唯一的编号&#xff0c;这个编号也被称为地址编号&#xff0c;就相当于&#xff0c;编号地址指针。 二、指针…

STM32F4 GPIO端口二极管作用——二极管钳位作用

如上图所示&#xff0c;有两个保护二极管&#xff0c;用于保护内部电路&#xff0c;防止I\O引脚外部过高或者过低的电压输入时造成内部电路损坏。 具体来讲&#xff1a;当引脚输入电压高于VDD时&#xff0c;上面的二极管导通&#xff0c;输入点电压被钳位到约VDD0.7V&#xff…

python打包部署脚本

linux可使用expect来实现自动交互&#xff0c;windows想要写出同样的功能脚本&#xff0c;只能使用python或者安装ActiveTcl 1、安装python Microsoft Store搜索python直接安装&#xff0c;默认会直接添加到环境变量https://www.python.org/官网下载&#xff0c;点击安装时会提…

比尔·盖茨谈他对软件应用和人工智能代理未来的见解

比尔盖茨在他的 Gatesnotes 网站中发表了一篇文章&#xff0c;分享了他对软件应用和人工智能代理未来的见解。他认为人工智能代理将大行其道&#xff0c;在接下来的五年里&#xff0c;这将完全改变。你不需要为不同的任务使用不同的应用程序。你只需用日常语言告诉你的设备你想…

基于Python优化图片亮度与噪点

支持添加噪点类型包括&#xff1a;添加高斯噪点、添加椒盐噪点、添加波动噪点、添加泊松噪点、添加周期性噪点、添加斑点噪点、添加相位噪点&#xff0c;还提供清除噪点的功能。 我们先看一下实测效果&#xff1a;&#xff08;test.jpg为原图&#xff0c;new.jpg为添加后的图片…

基于JavaWeb+SSM+校园零售商城微信小程序系统的设计和实现

基于JavaWebSSM校园零售商城微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 摘 要 在Internet高速发展的今天&#xff0c;我们生活的各个领域都涉及到计算机的应…

HRNet关键点检测

HRNet是一种用于关键点检测的网络架构&#xff0c;它具有一些优点和缺点。 优点&#xff1a; 可以保持高分辨率&#xff1a;HRNet将高分辨率到低分辨率的子网并联连接&#xff0c;而不是像大多数现有解决方案那样串联连接。因此&#xff0c;HRNet能够保持高分辨率&#xff0c…

动态修改hosts

前言 因工作需要频繁变更hosts&#xff0c; 故须自己实现一个动态管理器&#xff0c; 市面上其实已经有了类似的软件&#xff0c;比如switchhosts!但因为不好集成其他功能&#xff08;如远程连接KVM&#xff09;&#xff0c;所以还是决定自己开发一套。 原理 使用之前强烈建…