当前位置: 首页 > 图灵资讯 > 技术篇> 不可轻视的java数组

不可轻视的java数组

来源:图灵教育
时间:2023-04-10 17:22:27

何谓数组?所谓数组,是指有序的元素序列。在Java中,java数组也是Java对象。若将有限类型相同变量的集合命名,则该名称称称为数组名称。组成数组的每个变量都称为数组的重量,也称为数组的元素,有时也称为下标变量。用于区分数组各元素的数字编号称为下标。为了方便处理程序设计中的数组, 以无序的形式组织具有相同类型元素的一种形式。同类数据元素的集合称为数组。数组是用来存储多种相同类型数据的集合。

数组的特点:

1)创建数组对象将在内存中打开一个完整的连续空间,并在数组名中引用该连续空间的第一个地址。

2)数组本身是引用数据类型,数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。

3)一旦确定了数组的长度,就无法修改。

4)数组排列有序,我们可以通过下标(或索引)直接获得指定位置的元素,速度非常快。

结合上述数组的特点,了解数组是如何建立的。

. 声明数组变量;

声明数组:

1) 存储相同类型数据的集合

a. 可以是基本类型,也可以是对象类型;

b. 数组中的每个数据都是元素;

2) 数组是一个对象,成员是数组长度和数组中的元素;

3) 声明数组变量没有创建对象;

4) 声明数组的方式:

int[] IArray 或者 int IArray[] 存储在基本数据类型数组中的基本数据类型。

Teacher[] tArray 或者 Teacher tArray[] Teacher创建的几个对象存储在类型数组中。

注意:1) 在声明数组变量时,不能指定数组的长度,以下声明方法是非法的。

int x[1];

int[2] x;

. 初始化

初始化:自变量创建以来首次赋值的过程;

1. 创建数组对象;

和其他Java对象一样,数组对象也是用new语句创建的;

int[] iArray = new int[2];

new int[2]句子执行以下步骤:

a. 将内存空间分配到堆区,创建了一个包含两个元素的int数组

b. 将数据类型的默认值赋予数组中的每个元素。

以下是相应的默认值:

byte/short/int/long 0

float 0.0f

double 0.0d

String null

char '\u0000'

boolean false

c. 引用返回数组对象

在用new语句创建数组对象时,需要指定数组长度。数组长度表示数组中包含的元素数量。数组长度可以用具体的值或变量来表示。

如:

int[] x = new int[10];

int size=10;

int[] x = new int[size];

当数组中没有元素时,数组的长度可以为0。例如:

int[] x = new int[0];

Java程序入口方法main(String args[]),如果该类在运行过程中没有输入参数,则main()方法的参数args不是null, 但是一个长度为0的数组。

例如:

public class Sample {

public static void main(String[] args) {

System.out.println(args.length); //打印0

}

}

创建数组对象后,其长度是固定的。数组对象的长度不能改变,但数组变量可以改变引用的数组对象。

int[] x = new int[3];

int[] y = x;

x = new int[4];

我们可以验证以上程序段,如下所示:

package com.wusu.test01;

public class TestArray

{

public static void main(String[] args)

{

int []x=new int [3];

System.out.println(x.length);

int []y=x;

System.out.println(y.length);

x=new int [4];

System.out.println(x.length);

}

}

编译不会出错,操作结果如下(输出分别在代码中3个数组的长度):

2. 数组对象的初始化;

数组中的每个元素都有一个索引,或下标。数组中的第一个元素索引为0,第二个元素索引为1, 依次类推。

可以通过索引访问数组中的元素或赋值数组中的元素。

1) 声明、创建、初始化分离:

//声明

int[] iArray;

//创建

iArray = new int[2];

//初始化

iArray[0] = 0;

iArray[1] = 1;

2) 同时对数组进行声明、创建和初始化;

int[] iArray = {0, 1};

int[] iArray = new int[]{0, 1};

Student sArray[] = new Student[] { new Student(“George”, “Male”, 20), new Student()};

Student[] stArray = { new Student(), new Student()} ;

注意:a.以下是非法数组初始化的方法:

int[] x = new int[5]{5,4,3,2,1}; //编译错误,创建数组对象并初始化时,无法指定数组长度;

int[] x;

x = {5,4,3,2,1}; //{5,4,3,2,1}必须在声明数组变量的语句中使用,不能单独使用

3. 多维数组;

Java支持多维数组。假设酒店有三层,第一层有四个房间,第二层有三个房间,第三层有五个房间。有一天,客户的住宿如下:

第三层: | |Tom |Jery| |Rose|

第二层: |Mary| |Kevin|

第一层: |Mike|Jane|Duke | |

每个房间的客人信息可以用两维数组存储。

String[][] room = new String[3][];

room[0] = new Stirng[]{"Mike","Jane","Duke",null};

room[1] = new String[]{"Mary",null,"kevin"};

room[2] = new String[]{null,"Tom","Jerry",null,"Rose"}

上述代码等价如下:

String[][] room = {

{"Mike","Jane","Duke",null},

{"Mary",null,"kevin"},

{null,"Tom","Jerry",null,"Rose"}

};

多维数组本质上是数组的数组,数组的元素内容或数组;

4. 数组边界:

1) 数组下标从0开始,数组通过数组对象引用变量下标访问数组。

数组中第一个元素的索引为0, 第二个元素的索引是1,依次类推。如果一个数组长度为5,可以通过下标4访问最后一个数组元素。如果下标5访问超过了数组的边界,Arrayindexoutofboundsexception将在运行过程中抛出。

2) 一个数组的元素数(数组长度)可以通过调用数组的length来获得。

所有Java数组都有length属性,表示数组的长度. 该属性只能读取,但不能修改。

以下修改数组的length属性是非法的。

int[] x = new int[4];

x.length = 10; //编译错误,length属性不能修改。

注:a. 在访问其元素之前,数组变量必须指向数组对象。

public class Sample {

private int[] x;

public static void main(String[] args) {

Sample s = new Sample();

System.out.println(s.x); ///打印null

System.out.println(s.x[0]); ///运行时抛出Nulpointerexception

System.out.println(s.x.length); ///运行时抛出Nulpointerexception

}

}

b. 当数组元素为引用类型时,数组中存储的是对象的引用,而不是对象本身;

5. 复制数组:

一旦确定了数组的长度,就无法调整。我们可以通过复制数组的内容灵活性来改变数组的长度。在System类中提供辅助服务 araycopy方法提供复制数组内容的功能:

public static void arraycopy(Object src,

int srcPos,

Object dest,

int destPos,

int length)

参数1,需要复制的目标数组

参数2,从这个数组的哪个位置复制

参数3,需要将数据复制到另一个新的数组对象

参数4,复制到新数组中的哪个位置(从这个位置开始)

参数5,复制目标数组的长度

如下所示代码,ArrayCopy.java,我们先定义数组a1、a2,给a1赋初值{1、2、3、4、5、6、7、8、9、10},而a2只定义不赋

package com.wusu.test01;

public class ArrayCopy

{ //显示数组函数

public static void show(int[] a)

{

for(int i=0;i

{

System.out.print(a[i]+" ");

}

System.out.println();

}

//主函数

public static void main(String[] args)

{

int [] a1={1、2、3、4、5、6、7、9、10};

int [] a2=new int[10];

System.out.println("a1.length:"+a1.length+" a2.length:"+a2.length);

show(a1);///复制前显示

show(a2);///复制前显示

System.arraycopy(a1、3、a2、1、6);//复制

System.out.println("a1.length:"+a1.length+" a2.length:"+a2.length);

show(a1);///复制后显示

show(a2);///复制后显示

}

}

操作程序后,将A1数组中的数字复制到A2数组,复制总长度为6。

看似简单的数组,我们只谈了一小部分,还有很多我们没有谈论或忽略的知识点和案例。所以,在我们面前java不要掉以轻心,要严阵以待。