day13-StringBuffer和數(shù)組排序查找

13.01_常見(jiàn)對(duì)象(StringBuffer類的概述)

  • A:StringBuffer類概述
    • public final class StringBuffer extends Object
    • 線程安全的可變字符序列
  • B:StringBufferString的區(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:面試題
    • StringBufferStringBuilder的區(qū)別???

    • StringBuffer是jdk1.0版本的,是線程安全的,效率低

    • StringBuilder是jdk1.5版本的,是線程不安全的,效率高

    • StringStringBuffer,StringBuilder的區(qū)別???

    • String是一個(gè)不可變的字符序列

    • StringBuffer,StringBuilder是可變的字符序列

13.11_常見(jiàn)對(duì)象(String和StringBuffer分別作為參數(shù)傳遞)

  • String類雖然是引用數(shù)據(jù)類型,但是它當(dāng)參數(shù)傳遞時(shí)則和基本數(shù)據(jù)類型一樣
  • StringBufferStringBuilder做為參數(shù)傳遞時(shí),卻和其他普通引用數(shù)據(jù)類型一樣,會(huì)被方法體內(nèi)改變。

13.12_數(shù)組冒泡排序 和 選擇排序

排序思想.png

冒泡排序是最基本的排序方法,必須會(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ú)序,就不能使用二分查找法?。?!
二分查找圖解.png
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í)非常有用的其他一些常量和方法
  • 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)

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ì)拒絕的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法,內(nèi)部類的語(yǔ)法,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 34,734評(píng)論 18 399
  • [TOC] StringBuffer類 StringBuffer類概述及其構(gòu)造方法 StringBuffer類概述...
    lutianfei閱讀 534評(píng)論 0 1
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,578評(píng)論 19 139
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問(wèn)題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,923評(píng)論 0 33
  • 六朝風(fēng)云變幻,無(wú)關(guān)予事。 卻道十二明月,牽縈我心。
    千璣玨閱讀 362評(píng)論 0 2

友情鏈接更多精彩內(nèi)容