天天看點

數組(基本資訊、記憶體圖)

    (1)數組:存儲同一種資料類型的多個元素的容器。

    (2)特點:每一個元素都有編号,從0開始,最大編号是長度-1。

             編号的專業叫法:索引

    (3)定義格式

        A:資料類型[] 數組名;

        B:資料類型 數組名[];

        推薦是用A方式,B方法就忘了吧。

        但是要能看懂

    (4)數組的初始化(就是為數組開辟記憶體空間,并為每個數組元素賦予值)

        A:動态初始化

            隻給長度,系統給出預設值

            舉例:int[] arr = new int[3];

        B:靜态初始化

            給出值,系統決定長度

            舉例:int[] arr = new int[]{元素1,元素2,...};

            簡化版:int[] arr = {元素1,元素2,...};

    (5)Java的記憶體配置設定

        A:棧 存儲局部變量

        B:堆 存儲所有new出來的(需要有數值,如果沒有,就用預設值(0,null等))

        C:方法區(面向對象部分詳細講解)

        D:本地方法區(系統相關)

        E:寄存器(CPU使用)

        注意:

            a:局部變量 在方法定義中或者方法聲明上定義的變量。

            b:棧記憶體和堆記憶體的差別

                棧:資料使用完畢,就消失。

                堆:每一個new出來的東西都有位址

                    每一個變量都有預設值

                        byte,short,int,long 0

                        float,double 0.0

                        char '\u0000'

                        boolean false

                        引用類型 null

                    資料使用完畢後,在垃圾回收器空閑的時候回收。

    (6)數組記憶體圖

        A:一個數組

        B:二個數組

        C:三個數組(兩個棧變量指向同一個堆記憶體)

    (7)數組的常見操作

        A:周遊

            方式1:

                public static void printArray(int[] arr) {

                    for(int x=0; x<arr.length; x++) {

                        System.out.println(arr[x]);

                    }

                }

            方式2:

                public static void printArray(int[] arr) {

                    System.out.print("[");

                    for(int x=0; x<arr.length; x++) {

                        if(x == arr.length-1) {

                            System.out.println(arr[x]+"]");

                        }else {

                            System.out.println(arr[x]+", ");

                        }

                    }

                }

        B:最值

            最大值:

                public static int getMax(int[] arr) {

                    int max = arr[0];

                    for(int x=1; x<arr.length; x++) {

                        if(arr[x] > max) {

                            max = arr[x];

                        }

                    }

                    return max;

                }

            最小值:

                public static int getMin(int[] arr) {

                    int min = arr[0];

                    for(int x=1; x<arr.length; x++) {

                        if(arr[x] < min) {

                            min = arr[x];

                        }

                    }

                    return min;

                }

        C:逆序

            方式1:

                public static void reverse(int[] arr) {

                    for(int x=0; x<arr.length/2; x++) {

                        int temp = arr[x];

                        arr[x] = arr[arr.length-1-x];

                        arr[arr.length-1-x] = temp;

                    }

                }

            方式2:

                public static void reverse(int[] arr) {

                    for(int start=0,end=arr.length-1; start<=end; start++,end--) {

                        int temp = arr[start];

                        arr[start] = arr[end];

                        arr[end] = temp;

                    }

                }

        D:查表

                public static String getString(String[] strArray,int index) {

                    return strArray[index];

                }

        E:基本查找

            方式1:

                public static int getIndex(int[] arr,int value) {

                    for(int x=0; x<arr.length; x++) {

                        if(arr[x] == value) {

                            return x;

                        }

                    }

                    return -1;

                }

            方式2:

                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;

                }

    (8)數組操作的兩個常見小問題:

        ArrayIndexOutOfBoundsException:數組索引越界異常

            原因:你通路了不存在的索引。

        NullPointerException:空指針異常

            原因:數組已經不在指向堆記憶體了。而你還用數組名去通路元素。

例:數組記憶體圖解

數組(基本資訊、記憶體圖)