JAVA数组

来源:互联网 发布:用python直接写utf 编辑:程序博客网 时间:2024/06/10 09:11

一、数组概述

什么是数组呢?

所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字成为数组名,编号成为下标。

1.数组的定义


概念:同一种类型数据的集合。其实也可以说数组就是一个容器。             
好处:可以自动给数组中的元素从0开始编号,方便操作这些元素,因为长度固定,所以查找速度快。

缺点:  大小固定,不适合动态存储。不方便动态添加。

注意:数组的长度是固定的。

数组的两种表现形式:           

格式1:元素类型[] 数组名 = new 元素类型[元素个数或数组长度];             

示例:int[] arr = new int[5];
               
格式2:元素类型[] 数组名 = new 元素类型[]{元素,元素,......};            

示例: int[] arr = new int[]{3,5,1,8};

这里面的arr不是int类型,它是数组类型,数组(引用数据类型)是一种单独的数据类型int[] arr = {4,5,7,3};

不过可以说这是一个int类型的数组。

2.数组的操作

常见的数组操作,是获取数组中的元素。

怎么获取数组中的元素呢?

1)数组的遍历

示例:

int[] arr = new int[3];//建立一个长度为3的数组对象

for(int x = 0;x < arr.length; x++)//循环

{

      System.out.println("arr["+x+"]="+arr[x]+";");//打印出数组每个角标的值,因为没有定义值,所以打印出来的是默认初始化值。

}

注意:有的人在输出时有可能System.out.println(arr);直接这样输出,这样显示的结果是这个数组在内存中的地址,叫把一个数组实体的引用给直接打印了。例:输出了[I@de6ced,[代表数组。I是Integer(int)是数组中的元素类型。de6ced这个是数组的内存存放地址 是哈希值 十六进制的。

2)获取最值

 示例:

1.最大值

int[] arr = {1,5,5,6,8,-3,-9,0,99,6,45};

int max = 0;//定义一个变量,赋初值0;

for(int x = 1;x<arr.length;x++)//遍历数组,因为要两个值比较,所以x小于数组的长度。

{

           if(arr[max]<arr[x])//比较如果数组0角标的值小于数组1角标的值

           {

                     max = x;把大的角标数赋给max,这里也可以写出arr[max] = arr[x];,这给的就是值了

           }

}

System.out.println(arr[max]);//输出数组中的最大值。

2.最小值

int[] arr = {2,5,4,6,7,2,9,0,6,7,4};

int min = 0;//定义一个变量,赋初值0.

for(int x = 1;x<arr.length;x++)//遍历数组

{

       if(arr[min]>arr[x])//如果数组0角标的值大于数组1角标的值。

       {

               min = x;//把小的角标数赋给min

       }

}

System.out.println(arr[min]);//输出数组中的最小值。

3)数组的排序、查找与置换位置

对数组中的数据进行排序,查找数组中的指定数据,对数组中的数进行换位。详见黑马程序员_java数组排序,查找与置换

 

二、数组的常见问题

1.角标越界异常(ArrayIndexOutOfBoundsException)

在操作数组时,访问到数组中不存在的角标时出现的问题。

示例:

int[] arr = new int[3];

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

代码在编译的时候是通过的,说明语法上是没有问题的。

在运行是就会报错。因为数组长度是3,角标是从0开始,就是0、1、2。没有3这个角标。

2.空指针异常(NullPointerException)

空指针异常,当引用没有任何指向值为null的情况,该引用还在用于操作实体。

示例:

int[] arr = null;

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

代码在编译时没有错误,在运行是出错。你的数组是空的,你却访问数组0角标的值。

三、二维数组

格式1:int[][] arr = new int[3][2];

定义了名称为arr的二维数组

二维数组中有3个一维数组

每个一维数组中有2个元素

一维数组的名称分别为arr[0],arr[1],arr[2]

给第一个一维数组1脚标位赋值为78写法是:arr[0][1]=78;

 

格式2:int[][] arr = new int[3][];

二维数组中有3个一维数组

每个一维数组都是默认初始化值null

可以对这三个一维数组分别进行初始化

arr[0] = new int[8];

arr[1] = new int[6];

arr[2] = new int[9];

 

 

总结:

        数组的运用很多,一定要注意它常见的问题。在定义数组是还可以如下定义:

     int arr[] = new int[5];              int[] arr[] = new int[][];//这个也是二维数组

     int[][] arr = {{1,2},{4,5},{4,9}};//给二维数组赋初值

二位数组多用在打印一个几行几列表格和取一个图中x轴、y轴。

     int[] arr = new int[3]{1,2,3};//这种定义方法不要用,你给数组赋了值就不要在指定数组长度了,这容易出错。

3 0