13.01_常見對象(StringBuffer類的概述)
- A:
StringBuffer
類概述public final class StringBuffer extends Object
- 線程安全的可變字符序列
- B:
StringBuffer
和String
的區(qū)別-
String
是一個不可變的字符序列 -
StringBuffer
是一個可變的字符序列
-
13.02_常見對象(StringBuffer類的構造方法)
- A:
StringBuffer
的構造方法:-
public StringBuffer()
:無參構造方法 -
public StringBuffer(int capacity)
:指定容量的字符串緩沖區(qū)對象 -
public StringBuffer(String str)
:指定字符串內容的字符串緩沖區(qū)對象
-
- B:
StringBuffer
的方法:-
public int capacity()
:返回當前容量雪标,默認初始容量是16 -
public int length()
:返回長度(字符數(shù))零院。 實際值
-
StringBuffer sb = new StringBuffer("XXOO");
System.out.println(sb.length()); //字符串長度,結果4
System.out.println(sb.capacity()); //結果20 村刨,字符串length + 初始容量
13.03_常見對象(StringBuffer的添加功能)
-
public StringBuffer append(String str)
:
可以把任意類型數(shù)據(jù)添加到字符串緩沖區(qū)里面,并返回字符串緩沖區(qū)本身 -
public StringBuffer insert(int offset,String str)
:
在指定位置把任意類型的數(shù)據(jù)插入到字符串緩沖區(qū)里面,并返回字符串緩沖區(qū)本身
StringBuffer
是字符串緩沖區(qū)告抄,當new的時候,是在堆內存創(chuàng)建了一個對象嵌牺,底層是一個長度為16的字符數(shù)組打洼,當調用添加方法時,不會再重新創(chuàng)建對象逆粹,而是不斷的向原緩沖區(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)
:
刪除從指定位置開始指定位置結束的內容阿浓,并返回本身,包含頭不包含尾(開閉區(qū)間)蹋绽,
System.out.println(sb.capacity());
//結果20 芭毙,字符串length + 初始容量清空緩存區(qū):
sb.delete(0, sb.length());
13.05_StringBuffer的替換和反轉功能
-
public StringBuffer replace(int start,int end,String str):
從start開始到end用str替換 -
public StringBuffer reverse():
字符串反轉
13.06_StringBuffer的截取功能及注意事項
-
public String substring(int start):
從指定位置截取到末尾 -
public String substring(int start,int end):
截取從指定位置開始到結束位置,包括開始位置蟋字,不包括結束位置 - B:注意:返回值類型不再是
StringBuffer
本身
13.07_StringBuffer和String的相互轉換
- A:
String
-->StringBuffer
- a:通過構造方法
- b:通過append()方法
- B:
StringBuffer
-->String
- a:通過構造方法
- b:通過
toString()
方法 - c:通過
subString(0,length)
;
13.10_StringBuffer和StringBuilder的區(qū)別
- A:
StringBuilder
的概述- 通過查看API了解一下StringBuilder類
- B:面試題
StringBuffer
和StringBuilder
的區(qū)別???StringBuffer
是jdk1.0版本的,是線程安全的,效率低StringBuilder
是jdk1.5版本的,是線程不安全的,效率高String
和StringBuffer
,StringBuilder
的區(qū)別???String
是一個不可變的字符序列StringBuffer
,StringBuilder
是可變的字符序列
13.11_常見對象(String和StringBuffer分別作為參數(shù)傳遞)
-
String
類雖然是引用數(shù)據(jù)類型稿蹲,但是它當參數(shù)傳遞時則和基本數(shù)據(jù)類型一樣 -
StringBuffer
和StringBuilder
做為參數(shù)傳遞時,卻和其他普通引用數(shù)據(jù)類型一樣鹊奖,會被方法體內改變苛聘。
13.12_數(shù)組冒泡排序 和 選擇排序
冒泡排序是最基本的排序方法,必須會的。直接代碼:
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 ;
}
}
} //冒泡排序的寫法不唯一唱捣,但是只要思路一樣都是可以的。
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 ;
}
}
} //選擇排序的寫法不唯一网梢,但是只要思路一樣都是可以的震缭。
13.16_數(shù)組高級二分查找
- 二分查找 --> 前提:數(shù)組元素有序。如果數(shù)據(jù)無序战虏,就不能使用二分查找法<鹪住!烦感!
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的情況: 說明在mid右邊
min = mid + 1 ;
}else { // 2.中間值大于value: 說明在mid左邊
max = mid - 1;
}
//min大于max就越界了巡社,就是沒找到的情況
if (min > max) return -1 ;
mid = (int) ((min + max) * 0.5);
}
return mid;
}
13.18_常見對象(Arrays類的概述和方法使用)
- A:
Arrays
類概述- 針對數(shù)組進行操作的工具類(工具類是私有構造方法的,不能new對象)
- 提供了排序手趣,查找等功能晌该,里面的功能非常多的,建議查看API
int[] arr = {11,66,22,99,33,22};
// 1.數(shù)組轉字符串輸出
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)); //找不到绿渣,返回 -(插入點-1)
13.19_常見對象(基本類型包裝類的概述)
- A:為什么會有基本類型包裝類
- 將基本數(shù)據(jù)類型封裝成對象的好處在于可以在對象中定義更多的功能方法操作該數(shù)據(jù)朝群。
- B:常用操作
- 常用的操作之一:用于基本數(shù)據(jù)類型與字符串之間的轉換。
- C:基本類型和包裝類的對應
byte Byte short Short int Integer long Long float Float double Double char Character boolean Boolean
八種基本數(shù)據(jù)類型包裝類中符,其中其中都有parseXxx
的方法姜胖,可以將這七種字符串轉為為對應的基本數(shù)據(jù)類型(Character
沒有這個方法,字符串通過toCharArray()
就可以轉為字符數(shù)組)
13.20_Integer類的概述和構造方法
- A:
Integer
類概述- 通過JDK提供的API舟茶,查看
Integer
類的說明 -
Integer
類在對象中包裝了一個基本類型 int 的值, - 該類提供了多個方法谭期,能在
int
類型和String
類型之間互相轉換堵第, - 還提供了處理
int
類型時非常有用的其他一些常量和方法
- 通過JDK提供的API舟茶,查看
- B:構造方法
public Integer(int value)
public Integer(String s)
13.21_常見對象(String和int類型的相互轉換)
- A:
int
-->String
- a:和""進行拼接, 加號+
- 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_常見對象(JDK5的新特性自動裝箱和拆箱)
- A:JDK5的新特性
- 自動裝箱:把基本類型轉換為包裝類類型
- 自動拆箱:把包裝類類型轉換為基本類型
Integer ii = 100 ; //自動裝箱吧凉,不用new對象去創(chuàng)建了
ii ++ ; //自動拆箱,不用intValue()去顯示轉int了
System.out.println(ii);
// 在使用時踏志,Integer x = null;代碼就會出現(xiàn)NullPointerException阀捅。
// 建議先判斷是否為null,然后再使用针余。
13.23_常見對象(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的取值范圍饲鄙,如果在這個取值范圍,自動裝箱就不會
//新創(chuàng)建對象圆雁,而是從常量池中獲取忍级,如果超過了byte的范圍,才會創(chuàng)建對象
END伪朽。
我是小侯爺轴咱。
在魔都艱苦奮斗,白天是上班族,晚上是知識服務工作者朴肺。
如果讀完覺得有收獲的話窖剑,記得關注和點贊哦。
非要打賞的話戈稿,我也是不會拒絕的西土。