天天看点

数组(基本信息、内存图)

    (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:空指针异常

            原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

例:数组内存图解

数组(基本信息、内存图)