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

13.01_常見對象(StringBuffer類的概述)

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

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

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

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

    • String是一個不可變的字符序列

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

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

  • String類雖然是引用數(shù)據(jù)類型稿蹲,但是它當參數(shù)傳遞時則和基本數(shù)據(jù)類型一樣
  • StringBufferStringBuilder做為參數(shù)傳遞時,卻和其他普通引用數(shù)據(jù)類型一樣鹊奖,會被方法體內改變苛聘。

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

排序思想.png

冒泡排序是最基本的排序方法,必須會的。直接代碼:

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ù)無序战虏,就不能使用二分查找法<鹪住!烦感!
二分查找圖解.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的情況: 說明在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 類型時非常有用的其他一些常量和方法
  • 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)

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伪朽。
我是小侯爺轴咱。
在魔都艱苦奮斗,白天是上班族,晚上是知識服務工作者朴肺。
如果讀完覺得有收獲的話窖剑,記得關注和點贊哦。
非要打賞的話戈稿,我也是不會拒絕的西土。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鞍盗,隨后出現(xiàn)的幾起案子需了,更是在濱河造成了極大的恐慌,老刑警劉巖般甲,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件援所,死亡現(xiàn)場離奇詭異,居然都是意外死亡欣除,警方通過查閱死者的電腦和手機住拭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來历帚,“玉大人滔岳,你說我怎么就攤上這事⊥炖危” “怎么了谱煤?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長禽拔。 經(jīng)常有香客問我刘离,道長,這世上最難降的妖魔是什么睹栖? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任硫惕,我火速辦了婚禮,結果婚禮上野来,老公的妹妹穿的比我還像新娘恼除。我一直安慰自己,他們只是感情好曼氛,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布豁辉。 她就那樣靜靜地躺著,像睡著了一般舀患。 火紅的嫁衣襯著肌膚如雪徽级。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天聊浅,我揣著相機與錄音餐抢,去河邊找鬼堵幽。 笑死,一個胖子當著我的面吹牛弹澎,可吹牛的內容都是我干的朴下。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼苦蒿,長吁一口氣:“原來是場噩夢啊……” “哼殴胧!你這毒婦竟也來了?” 一聲冷哼從身側響起佩迟,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤团滥,失蹤者是張志新(化名)和其女友劉穎缩宜,沒想到半個月后是尖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡隶债,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年秉溉,在試婚紗的時候發(fā)現(xiàn)自己被綠了力惯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡召嘶,死狀恐怖父晶,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情弄跌,我是刑警寧澤甲喝,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站铛只,受9級特大地震影響埠胖,放射性物質發(fā)生泄漏。R本人自食惡果不足惜淳玩,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一直撤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧凯肋,春花似錦谊惭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽豹芯。三九已至悄雅,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間铁蹈,已是汗流浹背宽闲。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人容诬。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓娩梨,卻偏偏與公主長得像,于是被迫代替她去往敵國和親览徒。 傳聞我的和親對象是個殘疾皇子狈定,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法习蓬,內部類的語法纽什,繼承相關的語法,異常的語法躲叼,線程的語...
    子非魚_t_閱讀 31,664評論 18 399
  • [TOC] StringBuffer類 StringBuffer類概述及其構造方法 StringBuffer類概述...
    lutianfei閱讀 470評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理芦缰,服務發(fā)現(xiàn),斷路器枫慷,智...
    卡卡羅2017閱讀 134,707評論 18 139
  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經(jīng)驗让蕾。 張土汪:刷leetcod...
    土汪閱讀 12,748評論 0 33
  • 六朝風云變幻,無關予事或听。 卻道十二明月涕俗,牽縈我心。
    千璣玨閱讀 325評論 0 2