day13

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = {12,43,56,23,72,81,92};
        System.out.println("排序前:");
        printArray(arr);
        System.out.println("排序后");
//        bubbleSort(arr);
//        printArray(arr);

        selectSort(arr);
        printArray(arr);
    }
//    冒泡排序,就是相鄰兩個(gè)元素之間進(jìn)行比較,大的元素排在最后面
    public static void bubbleSort(int[] arr){
        for (int i = 0; i <arr.length-1 ; i++) {
            for (int j = 0; j <arr.length-1-i ; j++) {
                if (arr[j]>arr[j+1]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
    }

//    選擇排序,每一個(gè)元素與其他元素比較,最小放最前面
    public static void selectSort(int[] arr){

        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;
                }
            }

        }
    }

//    遍歷數(shù)組元素
    public static void printArray(int[] arr){
        System.out.print("[");

        for (int i = 0; i <arr.length ; i++) {
            if (i == arr.length-1){
                System.out.println(arr[i]+"]");
            }else{
                System.out.print(arr[i]+",");
            }
        }
    }
}

1:StringBuffer(掌握)

(1)用字符串做拼接,比較耗時(shí)并且也耗內(nèi)存,而這種拼接操作又是比較常見的,為了解決這個(gè)問題,Java就提供了一個(gè)字符串緩沖區(qū)類。StringBuffer供我們使用。線程安全的可變字符串
安全 -- 同步 -- 數(shù)據(jù)是安全的;不安全 -- 不同步 -- 效率高一些
安全和效率問題是永遠(yuǎn)困擾我們的問題。
安全:醫(yī)院的網(wǎng)站,銀行網(wǎng)站 效率:新聞網(wǎng)站,論壇之類的
(2)StringBuffer的構(gòu)造方法
A:StringBuffer()
B:StringBuffer(int size)
C:StringBuffer(String str)
(3)StringBuffer的常見功能(自己補(bǔ)齊方法的聲明和方法的解釋)
A:添加功能

  • public StringBuffer append(String str):可以把任意類型數(shù)據(jù)添加到字符串緩沖區(qū)里面,并返回字符串緩沖區(qū)本身
  • public StringBuffer insert(int offset,String str):在指定位置把任意類型的數(shù)據(jù)插入到字符串緩沖區(qū)里面,并返回字符串緩沖區(qū)本身
  • // 鏈?zhǔn)骄幊?br> sb.append("hello").append(true).append(12).append(34.56);
    B:刪除功能
  • public StringBuffer deleteCharAt(int index):刪除指定位置的字符,并返回本身
  • public StringBuffer delete(int start,int end):刪除從指定位置開始指定位置結(jié)束的內(nèi)容,并返回本身
    C:替換功能
  • public StringBuffer replace(int start,int end,String str):從start開始到end用str替換
    D:反轉(zhuǎn)功能
    public StringBuffer reverse()
    E:截取功能(注意這個(gè)返回值)
    StringBuffer的截取功能:注意返回值類型不再是StringBuffer本身了
  • public String substring(int start)
  • public String substring(int start,int end)
    (4)StringBuffer的練習(xí)(做一遍)
    A:String和StringBuffer相互轉(zhuǎn)換
  • String -- StringBuffer
    方式一:構(gòu)造方法
    方式2:通過append()方法
    StringBuffer sb2 = new StringBuffer();
    sb2.append(s);
  • StringBuffer -- String
    toString()方法
    B:字符串的拼接
    C:把字符串反轉(zhuǎn)
    D:判斷一個(gè)字符串是否對(duì)稱
    (5)面試題
    小細(xì)節(jié):
    StringBuffer:同步的,數(shù)據(jù)安全,效率低。
    StringBuilder:不同步的,數(shù)據(jù)不安全,效率高。
    A:String,StringBuffer,StringBuilder的區(qū)別
    1.StringBuffer和String的區(qū)別?
    前者長(zhǎng)度和內(nèi)容可變,后者不可變。如果使用前者做字符串的拼接,不會(huì)浪費(fèi)太多的資源。
    B:StringBuffer和數(shù)組的區(qū)別?
    二者都可以看出是一個(gè)容器,裝其他的數(shù)據(jù)。但是呢,StringBuffer的數(shù)據(jù)最終是一個(gè)字符串?dāng)?shù)據(jù)。 而數(shù)組可以放置多種數(shù)據(jù),但必須是同一種數(shù)據(jù)類型的。
    (6)注意的問題:
    String作為形式參數(shù),StringBuffer作為形式參數(shù)。
    基本數(shù)據(jù)類型:形式參數(shù)的改變不影響實(shí)際參數(shù)。
    引用類型:形式參數(shù)的改變影響實(shí)際參數(shù)
    String作為參數(shù)傳遞,效果和基本類型作為參數(shù)傳遞是一樣的。
    2:數(shù)組高級(jí)以及Arrays(掌握)
    (1)排序
    A:冒泡排序
    相鄰元素兩兩比較,大的往后放,第一次完畢,最大值出現(xiàn)在了最大索引處。同理,其他的元素就可以排好。
public static void bubbleSort(int[] arr) {
        for(int x=0; x<arr.length-1; x++) {
            for(int y=0; y<arr.length-1-x; y++) {
                if(arr[y] > arr[y+1]) {
                    int temp = arr[y];
                    arr[y] = arr[y+1];
                    arr[y+1] = temp;
                }
            }
        }
    }
    ```     
B:選擇排序
把0索引的元素,和索引1以后的元素都進(jìn)行比較,第一次完畢,最小值出現(xiàn)在了0索引。同理,其他的元素就可以排好。
    
            public static void selectSort(int[] arr) {
                for(int x=0; x<arr.length-1; x++) {
                    for(int y=x+1; y<arr.length; y++) {
                        if(arr[y] < arr[x]) {
                            int temp = arr[x];
                            arr[x] = arr[y];
                            arr[y] = temp;
                        }
                    }
                }
            }
    (2)查找
        A:基本查找
            針對(duì)數(shù)組無序的情況

            public static int getIndex(int[] arr,int value) {
                int index = -1;
                
                for(int x=0; x<arr.length; x++) {
                    if(arr[x] == value) {
                        index = x;
                        break;
                    }
                }
                
                return index;
            }
B:二分查找(折半查找)
            針對(duì)數(shù)組有序的情況(千萬不要先排序,在查找)
            public static int binarySearch(int[] arr,int value) {
                int min = 0;
                int max = arr.length-1;
                int mid = (min+max)/2;
                
                while(arr[mid] != value) {
                    if(arr[mid] > value) {
                        max = mid - 1;
                    }else if(arr[mid] < value) {
                        min = mid + 1;
                    }
                    
                    if(min > max) {
                        return -1;
                    }   
                    mid = (min+max)/2;
                }
                return mid;
            }
(3)Arrays工具類
        A:是針對(duì)數(shù)組進(jìn)行操作的工具類。包括排序和查找等功能。
        B:要掌握的方法(自己補(bǔ)齊方法)
            把數(shù)組轉(zhuǎn)成字符串:
            排序:
            二分查找:
    (4)Arrays工具類的源碼解析
    (5)把字符串中的字符進(jìn)行排序
        舉例:
            "edacbgf"
            得到結(jié)果
            "abcdefg"
3:Integer(掌握)
    (1)為了讓基本類型的數(shù)據(jù)進(jìn)行更多的操作,Java就為每種基本類型提供了對(duì)應(yīng)的包裝類類型
        byte        Byte
        short       Short
        int         Integer
        long        Long
        float       Float
        double      Double
        char        Character
        boolean     Boolean
    (2)Integer的構(gòu)造方法
        A:Integer i = new Integer(100);
        B:Integer i = new Integer("100");
            注意:這里的字符串必須是由數(shù)字字符組成
    (3)String和int的相互轉(zhuǎn)換
        A:String -- int
            Integer.parseInt("100");
        B:int -- String
            String.valueOf(100);
    (4)其他的功能(了解)
        進(jìn)制轉(zhuǎn)換
    (5)JDK5的新特性
        自動(dòng)裝箱    基本類型--引用類型
        自動(dòng)拆箱    引用類型--基本類型
        把下面的這個(gè)代碼理解即可:
            Integer i = 100;
            i += 200;
    (6)面試題
        -128到127之間的數(shù)據(jù)緩沖池問題
              Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4);//false
        System.out.println(i3.equals(i4));//true
        System.out.println("-----------");

              Integer i5 = 128;
        Integer i6 = 128;
        System.out.println(i5 == i6);//false
        System.out.println(i5.equals(i6));//true
        System.out.println("-----------");

        Integer i7 = 127;
        Integer i8 = 127;
        System.out.println(i7 == i8);//true
        System.out.println(i7.equals(i8));//true
通過查看源碼,我們就知道了,針對(duì)-128到127之間的數(shù)據(jù),做了一個(gè)數(shù)據(jù)緩沖池,如果數(shù)據(jù)是該范圍內(nèi)的,每次并不創(chuàng)建新的空間
4:Character(了解)
(1)Character構(gòu)造方法    
    Character ch = new Character('a');
    (2)要掌握的方法:(自己補(bǔ)齊)
        A:判斷給定的字符是否是大寫
        B:判斷給定的字符是否是小寫
        C:判斷給定的字符是否是數(shù)字字符
        D:把給定的字符轉(zhuǎn)成大寫
        E:把給定的字符轉(zhuǎn)成小寫
    (3)案例:
        統(tǒng)計(jì)字符串中大寫,小寫及數(shù)字字符出現(xiàn)的次數(shù)
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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