13.01_常見(jiàn)對(duì)象(StringBuffer類的概述)
- A:
StringBuffer類概述public final class StringBuffer extends Object- 線程安全的可變字符序列
- B:
StringBuffer和String的區(qū)別-
String是一個(gè)不可變的字符序列 -
StringBuffer是一個(gè)可變的字符序列
-
13.02_常見(jiàn)對(duì)象(StringBuffer類的構(gòu)造方法)
- A:
StringBuffer的構(gòu)造方法:-
public StringBuffer():無(wú)參構(gòu)造方法 -
public StringBuffer(int capacity):指定容量的字符串緩沖區(qū)對(duì)象 -
public StringBuffer(String str):指定字符串內(nèi)容的字符串緩沖區(qū)對(duì)象
-
- B:
StringBuffer的方法:-
public int capacity():返回當(dāng)前容量,默認(rèn)初始容量是16 -
public int length():返回長(zhǎng)度(字符數(shù))。 實(shí)際值
-
StringBuffer sb = new StringBuffer("XXOO");
System.out.println(sb.length()); //字符串長(zhǎng)度,結(jié)果4
System.out.println(sb.capacity()); //結(jié)果20 ,字符串length + 初始容量
13.03_常見(jiàn)對(duì)象(StringBuffer的添加功能)
-
public StringBuffer append(String str):
可以把任意類型數(shù)據(jù)添加到字符串緩沖區(qū)里面,并返回字符串緩沖區(qū)本身 -
public StringBuffer insert(int offset,String str):
在指定位置把任意類型的數(shù)據(jù)插入到字符串緩沖區(qū)里面,并返回字符串緩沖區(qū)本身
StringBuffer是字符串緩沖區(qū),當(dāng)new的時(shí)候,是在堆內(nèi)存創(chuàng)建了一個(gè)對(duì)象,底層是一個(gè)長(zhǎng)度為16的字符數(shù)組,當(dāng)調(diào)用添加方法時(shí),不會(huì)再重新創(chuàng)建對(duì)象,而是不斷的向原緩沖區(qū)添加字符。
StringBuffer sb = new StringBuffer("1234");
sb.insert(3, "xxoo"); // 指定位置添加,注意這里可能出現(xiàn)越界情況
System.out.println(sb); // 123xxoo4
13.04_StringBuffer的刪除功能
public StringBuffer deleteCharAt(int index):
刪除指定位置的字符,并返回本身(有越界情況)public StringBuffer delete(int start,int end):
刪除從指定位置開(kāi)始指定位置結(jié)束的內(nèi)容,并返回本身,包含頭不包含尾(開(kāi)閉區(qū)間),
System.out.println(sb.capacity());//結(jié)果20 ,字符串length + 初始容量清空緩存區(qū):
sb.delete(0, sb.length());
13.05_StringBuffer的替換和反轉(zhuǎn)功能
-
public StringBuffer replace(int start,int end,String str):
從start開(kāi)始到end用str替換 -
public StringBuffer reverse():
字符串反轉(zhuǎn)
13.06_StringBuffer的截取功能及注意事項(xiàng)
-
public String substring(int start):
從指定位置截取到末尾 -
public String substring(int start,int end):
截取從指定位置開(kāi)始到結(jié)束位置,包括開(kāi)始位置,不包括結(jié)束位置 - B:注意:返回值類型不再是
StringBuffer本身
13.07_StringBuffer和String的相互轉(zhuǎn)換
- A:
String-->StringBuffer- a:通過(guò)構(gòu)造方法
- b:通過(guò)append()方法
- B:
StringBuffer-->String- a:通過(guò)構(gòu)造方法
- b:通過(guò)
toString()方法 - c:通過(guò)
subString(0,length);
13.10_StringBuffer和StringBuilder的區(qū)別
- A:
StringBuilder的概述- 通過(guò)查看API了解一下StringBuilder類
- B:面試題
StringBuffer和StringBuilder的區(qū)別???StringBuffer是jdk1.0版本的,是線程安全的,效率低StringBuilder是jdk1.5版本的,是線程不安全的,效率高String和StringBuffer,StringBuilder的區(qū)別???String是一個(gè)不可變的字符序列StringBuffer,StringBuilder是可變的字符序列
13.11_常見(jiàn)對(duì)象(String和StringBuffer分別作為參數(shù)傳遞)
-
String類雖然是引用數(shù)據(jù)類型,但是它當(dāng)參數(shù)傳遞時(shí)則和基本數(shù)據(jù)類型一樣 -
StringBuffer和StringBuilder做為參數(shù)傳遞時(shí),卻和其他普通引用數(shù)據(jù)類型一樣,會(huì)被方法體內(nèi)改變。
13.12_數(shù)組冒泡排序 和 選擇排序

冒泡排序是最基本的排序方法,必須會(huì)的。直接代碼:
int[] array = {12,2,56,23,14,89,34,11};
// 外循環(huán)只需要比較 array.length - 1 次就可以了
for (int i = 0; i < array.length - 1; i++) {
// -1為了防止越界,-i為了提高效率
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j] > array[j+1]) {
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp ;
}
}
} //冒泡排序的寫(xiě)法不唯一,但是只要思路一樣都是可以的。
13.14_選擇排序
int[] arr = {9,6,3,7,1,4,0,2};
for (int i = 0; i < arr.length -1; i++) {
for (int j = i+1 ; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp ;
}
}
} //選擇排序的寫(xiě)法不唯一,但是只要思路一樣都是可以的。
13.16_數(shù)組高級(jí)二分查找
- 二分查找 --> 前提:數(shù)組元素有序。如果數(shù)據(jù)無(wú)序,就不能使用二分查找法?。?!

public static int getIndexFromArray(int[] arr, int value) { //二分查找方法
if(arr.length == 0) return -1 ;
int min = 0;
int max = arr.length - 1 ;
int mid = (int) ((min + max) * 0.5);
while (arr[mid] != value) {
if (arr[mid] < value) { // 1.中間值小于value的情況: 說(shuō)明在mid右邊
min = mid + 1 ;
}else { // 2.中間值大于value: 說(shuō)明在mid左邊
max = mid - 1;
}
//min大于max就越界了,就是沒(méi)找到的情況
if (min > max) return -1 ;
mid = (int) ((min + max) * 0.5);
}
return mid;
}
13.18_常見(jiàn)對(duì)象(Arrays類的概述和方法使用)
- A:
Arrays類概述- 針對(duì)數(shù)組進(jìn)行操作的工具類(工具類是私有構(gòu)造方法的,不能new對(duì)象)
- 提供了排序,查找等功能,里面的功能非常多的,建議查看API
int[] arr = {11,66,22,99,33,22};
// 1.數(shù)組轉(zhuǎn)字符串輸出
System.out.println(Arrays.toString(arr));
// 2.數(shù)組排序(從小到大)
Arrays.sort(arr); //底層是快速排序法
System.out.println(Arrays.toString(arr));
// 3.二分查找(前提是有序數(shù)組)
System.out.println(Arrays.binarySearch(arr, 66));
System.out.println(Arrays.binarySearch(arr, 100)); //找不到,返回 -(插入點(diǎn)-1)
13.19_常見(jiàn)對(duì)象(基本類型包裝類的概述)
- A:為什么會(huì)有基本類型包裝類
- 將基本數(shù)據(jù)類型封裝成對(duì)象的好處在于可以在對(duì)象中定義更多的功能方法操作該數(shù)據(jù)。
- B:常用操作
- 常用的操作之一:用于基本數(shù)據(jù)類型與字符串之間的轉(zhuǎn)換。
- C:基本類型和包裝類的對(duì)應(yīng)
byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean
八種基本數(shù)據(jù)類型包裝類,其中其中都有parseXxx的方法,可以將這七種字符串轉(zhuǎn)為為對(duì)應(yīng)的基本數(shù)據(jù)類型(Character沒(méi)有這個(gè)方法,字符串通過(guò)toCharArray()就可以轉(zhuǎn)為字符數(shù)組)
13.20_Integer類的概述和構(gòu)造方法
- A:
Integer類概述- 通過(guò)JDK提供的API,查看
Integer類的說(shuō)明 -
Integer類在對(duì)象中包裝了一個(gè)基本類型 int 的值, - 該類提供了多個(gè)方法,能在
int類型和String類型之間互相轉(zhuǎn)換, - 還提供了處理
int類型時(shí)非常有用的其他一些常量和方法
- 通過(guò)JDK提供的API,查看
- B:構(gòu)造方法
public Integer(int value)public Integer(String s)
13.21_常見(jiàn)對(duì)象(String和int類型的相互轉(zhuǎn)換)
- A:
int-->String- a:和""進(jìn)行拼接, 加號(hào)+
- b:
public static String valueOf(int i) - c:
int-->Integer-->String(Integer類的toString()) - d:
public static String toString(int i)(Integer類的靜態(tài)方法)
- B:
String-->int- a:
String-->Integer-->int public static int parseInt(String s)
- a:
13.22_常見(jiàn)對(duì)象(JDK5的新特性自動(dòng)裝箱和拆箱)
- A:JDK5的新特性
- 自動(dòng)裝箱:把基本類型轉(zhuǎn)換為包裝類類型
- 自動(dòng)拆箱:把包裝類類型轉(zhuǎn)換為基本類型
Integer ii = 100 ; //自動(dòng)裝箱,不用new對(duì)象去創(chuàng)建了
ii ++ ; //自動(dòng)拆箱,不用intValue()去顯示轉(zhuǎn)int了
System.out.println(ii);
// 在使用時(shí),Integer x = null;代碼就會(huì)出現(xiàn)NullPointerException。
// 建議先判斷是否為null,然后再使用。
13.23_常見(jiàn)對(duì)象(Integer的面試題)
// ---- 面試題 ----
Integer i1 = new Integer(97);
Integer i2 = new Integer(97);
System.out.println(i1 == i2); //false
System.out.println(i1.equals(i2)); //true
System.out.println("-----------1");
Integer i3 = new Integer(197);
Integer i4 = new Integer(197);
System.out.println(i3 == i4);//false
System.out.println(i3.equals(i4));//true
System.out.println("-----------2");
Integer i5 = 97;
Integer i6 = 97;
System.out.println(i5 == i6); //true
System.out.println(i5.equals(i6)); //true
System.out.println("-----------3");
Integer i7 = 197;
Integer i8 = 197;
System.out.println(i7 == i8); //false
System.out.println(i7.equals(i8)); //true
//-128到127是byte的取值范圍,如果在這個(gè)取值范圍,自動(dòng)裝箱就不會(huì)
//新創(chuàng)建對(duì)象,而是從常量池中獲取,如果超過(guò)了byte的范圍,才會(huì)創(chuàng)建對(duì)象
END。
我是小侯爺。
在魔都艱苦奮斗,白天是上班族,晚上是知識(shí)服務(wù)工作者。
如果讀完覺(jué)得有收獲的話,記得關(guān)注和點(diǎn)贊哦。
非要打賞的話,我也是不會(huì)拒絕的。