数组相关知识整理

数组Array的相关知识整理

数组:是一种容器,可以同时存放多个数据值。

数组的特点

1,数组是一种引用数据类型

2,数组当中的多个数据,类型 必须统一

在数组刚开始定义的时候,就要你确定往数组里面存的是什么样的数据类型。确定了 int 就不能把一个3.1存到数组里

3,数据的长度在程序运行期间不可改变

数组在刚开始创建的时候,我规定了只能存10个数,那么后面在使用的时候,最多只能存10个

数组(Array)的初始化,在内存当中创建一个数组,并且向其中赋予一个默认值

两种常见的初始化方式

1动态初始化(指定长度)       数据类型[] 数组名称 = new 数据类型[数组长度];

2静态初始化(指定内容)       数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,..};

静态初始化省略格式           数据类型[] 数组名称 = {元素1,元素2,..};

 

new:关键字在jvm里面的作用:确定数组的类型和 长度。

这种定义格式:不知道存储的数据,但是我知道要存储几个。

解析含义:

左侧数据类型,也就是数组当中保存的数据全部都是统一的类型

左侧的中括号,代表我是一个数组

左侧数组名称,给数组取一个名字

右侧的new,代表创建数组的动作

右侧数据类型必须和左边的数据类型保持一致

右侧中括号的长度,也就是数组当中,到底可以保存多少个数据是一个int数字

区别:

动态初始化(指定长度):在创建数组的时候,直接指定数组当中的数据元素个数

静态初始化(指定内容):在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定

注意事项:1-虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出来长度

              2-静态初始化标准格式可以拆分成为两个步骤

              3-动态初始化也可以拆分成两个步骤

              4-静态初始化一旦使用省略格式,就不能拆分成两个步骤了

使用建议

如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化

直接打印数组名称,得到的是数组对应的:内存地址哈希值

 

二进制:01

十进制:0123456789

十六进制:0123456789abcdef

 

访问数组元素的格式:数组名称[索引值];

索引值:就是一个int数字。代表数组当中元素的编号。

【注意!!!索引值从0开始,一直到“数组的长度-1”为止

例如打印数组的第一个元素

System.out.println(Array[0]);

例如元素赋值给一个变量

int snum = Array[1];

System/out.println(num);

由此得出:可以直接打印出数组当中的元素

          也可以将数组当中的某一个单个元素,赋值交给变量。

 

访问数组元素进行赋值

       int [] arr = new int[3];

       //1,如何获取数组中的每一个元素

              int i = arr[0];

       //2.如果给数组中的每一个元素进行赋值

              arr[0] = 10;

动态初始化数组

使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值,规则如下

如果是整数类型,那么默认为0

如果是浮点类型,那么默认为0.0

如果是字符类型,那么默认为‘\u0000’

如果是布尔类型,那么默认为FALSE

如果是引用类型,那么默认为null

注意事项

静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值

案例-静态初始化数据格式

int[] array = newint[]{10,11,12};

             array[0]=18;

             int i = array[0];

        System.out.println(array[0]);

 

案例-数组的遍历输出:int [] arr = newint[]{10,11,12,77,6};

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

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

                }

数组遍历的快捷键:array.fori--回车

遍历:是一个专业的称呼。

              实际的操作:就是把一个容器里面所有的元素一一的都获取出来。

       在idea中遍历的快捷键 : arr.fori + 回车

如果上面已经定义了i这个变量

              1,那么在自动生成了循环之后,不要进行其他任何操作,可以直接修改变量名。

              2,如果已经进行了其他操作,还要再进行修改变量,可以按批量修改变量名的快捷键(shift + f6 / shift + fn + f6)  //只要是使用了这个变量的地方,那么都会随之改变。

 

求出数组中的最值

       "求最值,一定要设置一个参照物。"

"      int max = arr [0];"

"      参照物一定要是在数组中存在的元素。"

       int max = -1; //参照物一定要是数组中的元素,建议直接使用0索引上的。

       -6 , -7 , -2 , -3 , -4 , -5  最大值

 

JAVA中的内存划分

JAVA的内存需要划分成为5个部分

1.栈(Stack):存放的都是方法中的局部变量

局部变量:方法的参数,或者是方法{}内部的变量

作用域:一旦超出作用域,立刻从栈内存中消失

2.堆(Heap):凡是NEW出来的东西,都在堆当中

       堆内存里面的东西都有一个地址值:16进制

       堆内存里面的数据,都有默认值。规则:

              如果是整数    默认值为0

              如果是浮点数       默认值为0.0

              如果是字符    默认为‘\u0000’

              如果是布尔    默认为false

              如果是引用类型    默认为NULL

3.方法区(Method Area):存储class相关信息,包含方法的信息

4.本地方法栈(Native Method Stsck):与操作系统相关--了解

5.寄存器(pc Register:与CPU相关--了解

 

如何获取数组长度,格式   :数组名称.length

这将会得到一个int数字,代表数组的长度

【注意!】数组一旦创建。程序运行期间,长度不可变

数组索引越界异常

数组的索引编号从0开始,一直到“数组的长度-1”为止

如果访问数组元素的时候。索引编号并不存在,那么将会发生数组索引越界异常ArrayIndexOutOfBoundsException--数组越界异常      原因 索引编号错误

              解决办法-修改成为正确存在的编号        

              记住索引的范围.

                     最小的索引:0

                     最大的索引:数组的长度 - 1.

空指针异常

所有的引用类型变量,都可以赋值为一个null值,但是代表其中什么都没有。

数组必须进行new初始化才能使用其中的元素

如果只是赋值了一个null,没有进行new创建

那么将会发生空指针异常NullPointerException

原因:忘了new

解决:补上new

null 可以赋值给所有的引用数据类型。

              null 是所有的引用数据类型的默认初始化值。

       目前为止引用数据类型: String (字符串)  Array(数组)

              String  s = null;

              int [] arr = null;

              //但是如果这么定于了,那么s和arr的变量记录的值就是null

              //切记不要使用s和arr的变量。

              //如果一定要用,只能先给s和arr进行赋值。

              //直接使用null那么就会报空指针异常。

 

//注意:

       有的时候,必须要用。

              1,我要在一个if判断里面创建一个数组。

               在判断结束之后,我还想使用这个数组。

               if(判断表达式){

                     int [] arr = new int[10];

               }

               //使用arr。不能用。

               //因为这样定义,arr是一个局部变量。超出大括号所在的范围就无法使用了。

              //如果我一定要在if的外面使用数组。

               int a = 10;

         int [] arr = null; //先给arr赋一个引用数据类型的默认初始化值

         if(a == a){

            arr = new int[10];

         }

               //使用arr

         System.out.println(arr);

       2.    //创建一个字符串类型的数组

                     String [] arrStr = newString[3];//引用数据类型默认初始化值就是null

                                                                      //这种情况下,如果没有赋值,那么所有的都是null

案例--求出数组中的最值: public static void main(String[]args) {

           int [] array = newint[]{22,333,99,444};

               int max = array[0];

         for (int i =0;i<array.length;i++){

           if (array[i]>max){

              max = array[i];

          }

            }System.out.println(max);}

数组元素反转:初始化语句:int min = 0;max = array.length-1

              条件判断:min < max

              步进表达式:min++,max--;

              循环体:用第三个变量倒手

1,当数组的长度为奇数和偶数的时候。  是不需要。

              当数组的长度为偶数的时候。   min>max

              当数组的长度为奇数的时候。   min=max

 

       数组反转其实就对称位置的元素交换

       用第三个变量倒手

       现在表示两个位置的是两个索引

       是对称位置的元素交换

       两个索引值min<max时进行交换

实例-数组反转: public static void main(String[] args) {

        int[] array=new  int[]{1,2,3,4};

        for (intmin=0,max=array.length-1;min<max;min++,max--){

            int temp = array[min];

            array[min]=array[max];

            array[max]=temp;

        }//反转

        for (int i=0;i<array.length;i++){

            System.out.println(array[i]);

        }

    }

数组作为方法参数传递地址:数组作为参数进行传递的时候,实际上就是把数组的地址值传递到方法中了。

"基本数据类型作为参数传递的时候,不会改变自己本身。"

引用数据类型作为参数传递的时候,会改变自己本身

三要素:

返回值类型:只是进行打印而已,不需要进行计算,也没有结果,用void

方法名称:printArray

参数列表:必须给我数组,我才能打印其中元素。Int[] array

数组可以作为方法的参数

当调用方法的时候像方法的小括号进行传参,传递进去的其实是数组的地址值

实例--数组作为方法参数: public static void main(String[]args){

                        int[] array={12,13,14,15};

                         printArray(array);

                           }

                    public static void printArray(int[] array) {

                          for (int i = 0 ; i <array.length;i++){

                              System.out.println(array[i]);

        }

    }

数组作为方法返回值-返回地址

一个方法可以有0、1 多个参数,但只能有0或1个返回值,不能有多个返回值

如果希望一个方法当中产生了多个结果数据进行返回,使用一个数组作为返回值即可

任何数据类型都能作为方法的参数类型或者返回值类型

数组作为方法的参数,传递进去的其实是数组的地址值

数组作为方法的返回值其实也是地址值

什么时候用:

              当我们需要把一堆数据一起进行返回的时候。

              我们可以把这些数据都放在一个数组中。

              将这个数组返回。

 

猜你喜欢

转载自blog.csdn.net/snack_tc_dora/article/details/81023087