Java類庫StrringBuffer類、Math、SimpleDateFormat、Random隨機數(shù)、大數(shù)字處理類和UU

1.StrringBuffer類 CharConsequnse接口
雖然一般對String的操作都是通過String類內(nèi)部的方法,但是當一個String類進行頻繁的修改則最好還是用StringBuffer類,以下是StringBuffer類的常用方法:
append():將指定的字符串、字符、布爾值、整數(shù)等追加到當前StringBuffer對象的末尾
insert():在指定位置插入指定的字符串、字符、布爾值、整數(shù)等
delete():刪除指定范圍內(nèi)的字符
deleteCharAt():刪除指定位置的字符
replace():用指定字符串替換指定范圍內(nèi)的字符
reverse():反轉(zhuǎn)當前字符串
substring():返回指定范圍內(nèi)的子字符串
length():返回字符串的長度
capacity():返回StringBuffer對象的容量
charAt():返回指定索引位置的字符
setCharAt():將指定索引位置的字符設(shè)置為指定字符
indexOf():返回指定字符或字符串第一次出現(xiàn)的索引
lastIndexOf():返回指定字符或字符串最后一次出現(xiàn)的索引
toString():將StringBuffer對象轉(zhuǎn)換為字符串
StringBuffer與String的不同
可變性:String 是不可變的,一旦創(chuàng)建就無法修改,任何對 String 的操作都會返回一個新的 String 對象。而 StringBuffer 是可變的,可以在已有對象上進行修改,避免頻繁創(chuàng)建新對象。
線程安全性:StringBuffer 是線程安全的,多個線程可以同時訪問和修改同一個 StringBuffer 對象,保證線程安全。而 String 是不可變的,因此天生具有線程安全性。
性能:由于 String 是不可變的,每次對 String 進行修改操作(如連接、替換等),都需要創(chuàng)建一個新的 String 對象,導(dǎo)致內(nèi)存消耗和性能開銷較大。而 StringBuffer 可以在原有對象上進行修改,避免了頻繁的對象創(chuàng)建和銷毀,提高了性能。
API 功能:String 類提供了豐富的字符串操作方法,例如字符串分割、查找、替換等操作。而 StringBuffer 除了提供了 String 的大部分方法外,還提供了插入、刪除、反轉(zhuǎn)等針對可變字符串的操作。
常用方法案例代碼1:

CharConsequense 接口:
該接口有三個子類:StringBuffer String 與StringBuilder
接口提供的方法:
charAt(int index):返回指定索引位置的字符
length():返回字符序列的長度
subSequence(int start, int end):返回特定開始索引(包括)到結(jié)束索引(不包括)之間的子序列

*面試題java 中操作字符串都有哪些類?它們之間有什么區(qū)別?
(1)String
String是不可變對象,每次對String類型的改變時都會生成一個新的對象。
(2)StringBuilder
線程不安全,效率高,多用于單線程。
(3)StringBuffer
線程安全,由于加鎖的原因,效率不如StringBuilder,多用于多線程。
不頻繁的字符串操作使用String,操作頻繁的情況不建議使用String。
StringBuilder > StringBuffer > String。

2.Math數(shù)學(xué)計算
由于經(jīng)常會遇到數(shù)據(jù)計算,所以學(xué)好Math非常重要,以下是開發(fā)中Math常用的方法:
abs(x):獲取參數(shù)的絕對值
ceil(x):向上取整,返回不小于參數(shù)的最小整數(shù)
floor(x):向下取整,返回不大于參數(shù)的最大整數(shù)
round(x):四舍五入,將參數(shù)舍入為最接近的整數(shù)
max(x, y):返回兩個參數(shù)中的較大值
min(x, y):返回兩個參數(shù)中的較小值
sqrt(x):計算參數(shù)的平方根
pow(x, y):計算 x 的 y 次冪
exp(x):計算 e 的 x 次冪
log(x):計算參數(shù)的自然對數(shù)(以 e 為底)
案例代碼:

*面試題 java 中的 Math.round(-1.5) 等于多少?
-2
Math提供了三個與取整有關(guān)的方法:ceil、floor、round
(1)ceil:向上取整;
Math.ceil(11.3) = 12;
Math.ceil(-11.3) = 11;
(2)floor:向下取整;
Math.floor(11.3) = 11;
Math.floor(-11.3) = -12;
(3)round:四舍五入;
加0.5然后向下取整。
Math.round(11.3) = 11;
Math.round(11.8) = 12;
Math.round(-11.3) = -11;
Math.round(-11.8) = -12;
?*面試題: 如何將字符串反轉(zhuǎn)?
添加到StringBuilder中,然后調(diào)用reverse()。

3.Date日期處理類與SimpleDateFormat
?日期處理類一般是獲取當前的時間。以下是日期處理類的常用的方法:
Date():使用當前日期和時間創(chuàng)建一個 Date 對象
Date(long time):使用指定的時間值(以毫秒為單位)創(chuàng)建一個 Date 對象
getTime():返回 Date 對象表示的時間值(以毫秒為單位)
案例代碼:

?雖然通過Date可以獲取當前的日期,但是并不能輸出我們想要的格式所以引入Simple日期格式化
SimpleDataFormat日期格式化
要了解日期格式化首先要了解日期格式化模板標記
y:年份,例如 2023
M:月份,如 7
d:月中的天數(shù),如 26
h:小時(1-12小時制),如 10
H:小時(0-23小時制),如 22
m:分鐘,如 56
s:秒鐘,如 30
S:毫秒,如 123
E:星期幾的縮寫,如 Mon
EEEE:星期幾的完整拼寫,如 Monday
z:時區(qū),如 GMT+08:00
Z:時區(qū)偏移量,如 +0800
a:上午/下午標記,如 AM/PM
?SimpleDatefomat常用的方法:
format(Date date)
:將指定的Date
對象格式化為字符串,使用SimpleDateFormat
對象的模式。parse(String source)
:將給定的字符串解析為Date
對象,根據(jù)SimpleDateFormat
對象的模式進行解析。SimpleDateFormat(String pattern)
:使用給定的模式創(chuàng)建一個SimpleDateFormat
對象。

4.Random隨機數(shù)
生產(chǎn)中需要用到隨機的事件非常多,比如抽獎,或者隨機選擇一個幸運兒的號碼。而隨機數(shù)也分兩種一種是可以重復(fù)的隨機數(shù),一種是不可重復(fù)的隨機數(shù)以下是Random的常用方法以及實現(xiàn)這兩種情況的方法
Random的常用方法:
nextInt(int bound)
:生成一個介于0(含)和指定邊界值(不含)之間的隨機整數(shù)。nextDouble()
:生成一個介于0.0(含)和1.0(不含)之間的隨機雙精度浮點數(shù)。nextLong()
:生成一個隨機的長整型數(shù)。nextBoolean()
:隨機生成一個布爾值,true或false。nextFloat()
:生成一個介于0.0(含)和1.0(不含)之間的隨機單精度浮點數(shù)。nextGaussian()
:生成一個符合高斯分布的隨機雙精度浮點數(shù)。setSeed(long seed)
:使用指定的種子設(shè)置隨機數(shù)生成器的種子值。nextInt()
:生成一個隨機整數(shù)。nextBytes(byte[] bytes)
:生成隨機字節(jié)數(shù)組,并將其存儲到指定的字節(jié)數(shù)組中。
可重復(fù)情況

2.不可重復(fù)情況
36個人中需要抽取7個去搬運書籍:


5.大數(shù)字處理類
由于有些數(shù)字太過于巨大以至于int這種數(shù)據(jù)類型無法進行接收,比如游戲中可能出現(xiàn)戰(zhàn)力膨脹可能數(shù)字需要幾百幾千億的攻擊力而生命值也有幾千萬億,那么這兩個數(shù)字沒辦法接收也就沒辦法去計算了,所以這時候就需要用到大數(shù)字處理類
在 Java 中,
int
是一個有符號的 32 位整數(shù)類型。它的取值范圍為 -2,147,483,648(-2^31)到 2,147,483,647(2^31-1)之間,即 -2 的 31 次方到 2 的 31 次方減一。超出這個范圍的整數(shù)值將導(dǎo)致溢出。
?大數(shù)字有兩類BigInteger類與BigDecimal類,顧名思義一個是整數(shù)類,一個是小數(shù)類
以下是BigInteger類常用的方法:
add(BigInteger val)
:將當前BigInteger
與指定的BigInteger
相加。subtract(BigInteger val)
:從當前BigInteger
中減去指定的BigInteger
。multiply(BigInteger val)
:將當前BigInteger
與指定的BigInteger
相乘。divide(BigInteger val)
:將當前BigInteger
除以指定的BigInteger
。mod(BigInteger val)
:返回當前BigInteger
除以指定BigInteger
的余數(shù)。pow(int exponent)
:返回當前BigInteger
的指定冪次方。compareTo(BigInteger val)
:比較當前BigInteger
與指定的BigInteger
的大小關(guān)系。equals(Object obj)
:判斷當前BigInteger
是否與指定對象相等。toString()
:將當前BigInteger
轉(zhuǎn)換為字符串表示形式。valueOf(long val)
:返回具有指定值的BigInteger
實例。isProbablePrime(int certainty)
:測試當前BigInteger
是否可能為素數(shù)。
以下是BigDecimal類常用的方法:
add(BigDecimal augend)
:將當前BigDecimal
與指定的BigDecimal
相加。subtract(BigDecimal subtrahend)
:從當前BigDecimal
中減去指定的BigDecimal
。multiply(BigDecimal multiplicand)
:將當前BigDecimal
與指定的BigDecimal
相乘。divide(BigDecimal divisor)
:將當前BigDecimal
除以指定的BigDecimal
。remainder(BigDecimal divisor)
:返回當前BigDecimal
除以指定BigDecimal
的余數(shù)。pow(int exponent)
:返回當前BigDecimal
的指定冪次方。setScale(int newScale, RoundingMode roundingMode)
:設(shè)置當前BigDecimal
的小數(shù)位數(shù)和舍入模式。compareTo(BigDecimal val)
:比較當前BigDecimal
與指定的BigDecimal
的大小關(guān)系。equals(Object obj)
:判斷當前BigDecimal
是否與指定對象相等。toString()
:將當前BigDecimal
轉(zhuǎn)換為字符串表示形式。valueOf(long val)
:返回具有指定值的BigDecimal
實例。stripTrailingZeros()
:返回一個去除尾部零的BigDecimal
。
使用的案例代碼:


6.UUID 無重復(fù)數(shù)據(jù)
由于賣的筆記本電腦,手機等等這些貴重的物品需要每一個都要有各自的編號并且不能重復(fù),如果用排序的方法可能哪一天電腦抽抽了就不知道該從第幾個序號開始才能確保唯一性,那么該如何保證id能夠唯一呢?java中提供了UUID(universally unique id)
方法:randomUUID();
具體使用:
