初学java Array小结

75 阅读4分钟

Array:Java中的容器:数组、集合框架(第12章),在内存中对多个数据的存储。

 

要素;数组名、下标、元素、数组长度

特点:数组本身是引用数据类型,数组中的元素可以是任意数据类型(基本数据类型或者引用数据类型)。

 

数组可以按照元素类型分类,也可以依据数组的维数分类。

一维数组:

1、声明和初始化

2、调用数组中的指定元素。

3、数组的属性

4、数组的遍历

5、数组元素的默认初始化值

6、一维数组的内存解析

 

 

1.1:数组的声明与初始化

(1)静态初始化:

数组变量与数组元素的赋值操作同时进行。

double[] prices;           //声明数组。

        prices = new double[]{28,32,43.21};          //静态初始化。

等价于:

double [] prices = new double{28,32,42.31};

 

int [] arr9 ={1,2,3};         //静态初始化方法2

 

(2)动态初始化:数组变量与数组元素的服饰操作分开进行。

 String[] fruit;

String[] fruit = new String[3];          //动态初始化。

 

(3)其他正确的方式

int arr1[]=new int[4];

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

另,以字符形式而非数字形式给数组赋值时,赋值内容应当用双引号括起。

例如:

String[] fruit;

    fruit = new String[]{"grape","orange","apple"};

 

 

1.2 数组元素的调用

(1)通过数组元素的角标获取数组的元素

角标的范围从0开始,到数组长度-1结束;

 

1.3 数组的属性

数组的长度:用来描述数组容器中容量的大小

使用length属性表示

 

 

1.4 数组的遍历

for(int i=0;i<3;i++){

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

        }

 

1.5 数组的默认初始化值

 

(1)整型数组元素的默认初始化值---->0

(2)浮点型---->0.0

(3)字符型---->0或理解为’\u0000’

(4)布尔型---->false

(5)引用数据类型---->null

 

1.6 数组的内存解析

(1)内存区域划分为5个部分:程序计数器、虚拟机栈、本地方法线、堆(heap)、方法区

与目前数组有关的内存结构:

虚拟机栈:用于存放方法中声明的变量,比如arr

堆:用于存放数组的实体(即数组中的所有元素)

栈中存放变量的首地址,构成指针指向堆中的具体数组元素。

堆中为数组实体开辟一片连续的空间,只暴露首地址(虚拟地址),赋值时具体的值取代初始化赋值。

两个变量(arr、arr1)指向同一数组

int [] arr1=arr;       //定义数组变量arr1,将arr的首地址赋值给arr1

数组的下标为什么从0开始:数组第一个元素距离首地址的偏移量为0.

 

 

 

 

二维数组

实际上,二维数组就是指,某个一维数组arr1内部的数组元素arr1[i]为另外的一维数组arr2。

六个基本点与一维数组相同。

1、声明和初始化

2、调用数组中的指定元素。

3、数组的属性

4、数组的遍历

5、数组元素的默认初始化值

6、内存解析

 

 

2.1 声明和初始化

 

(1)静态初始化

int [][] arr2 = new int [][]{{1,2,3},{4,5},{6,7,8}};  //[][]内不能写明长度

(2)动态初始化

String [][] arr3 = new String[2][2];  //规则二维数组

double[][] arr4 = new double[2][];    //不规则二维数组

二维数组中有2个一维数组,一维数组属于引用数据类型,默认初始值为null

(3)其他正确写法

  int arr5[][]=new int [][]{{1,2,3}.{4,5}};

    int [] arr6[] = new int [][]{{1,2,3},{4,5}};   //中括号的位置可灵活变换。

    int arr7[][]={{1,2,3},{4,5}};          //类型推断。

    String arr8 [][] = new String[3][4];

   

 

2.2 二维数组的调用

(1)内层元素的调用

 int [][] arr2 = new int [][]{{1,2,3},{4,5},{6,7,8}};

        System.out.println(arr2[1][1]);        //arr2[1][1]=5

(2)外层元素的调用

System.out.println(arr2[0]);       //[I@4206a205

System.out.println(arr2[1]);       //[I@29ba4338

System.out.println(arr2[2]);       //[I@57175e74

外层元素的调用会取出地址值

 

2.3  数组的属性(长度)

int [][] arr2 = new int [][]{{1,2,3},{4,5},{6,7,8}};

System.out.println(arr22.length);      //3

System.out.println(arr2[0].length);    //3

数组的length为内部最外层数组元素的个数。

 

2.4  二维数组的遍历

int [][] arr2 = new int [][]{{1,2,3},{4,5},{6,7,8}};

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

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

                System.out.println(arr2[i][j]+"\t");

            }

            System.out.println();

        }

 

2.5  数组的默认初始化值

二维数组的外层元素初始值为对应的地址。

二维数组的内层元素初始值与一维数组相同。

动态数组声明和初始化时存在例外。

double[][] arr4 = new double[2][];

System.out.println(arr4[0]);     //null。arr[4]数组为引用类型,初始为null

System.out.println(arr4[0][0]);      //报错。没有指针,无法获取。

2.6 数组的内存解析

代码中的new表示新开辟空间,建立新地址

int []arr1=new int [10];         byte []arr2=new byte [10];         arr1=arr2;               //编译不通过,int[]与byte[]为两种不同类型的引用变量