Java基础:数组相关的基本知识

数组的主要特点:

  • 一个数组中的元素应该是相同数据类型的
  • 数组中的各个元素是有序的,它们在内存中按照先后顺序连续存放在一起
  • 每个数组元素用其所在数组的名字和数组下标来确定
  • 数组的下标从0开始,数组的长度是指其所包含的数组元素的个数

数组类型是一种引用数据类型。数组元素可以是简单数据类型,也可以是对象数据类型。

一、一维数组

1、一维数组的声明

声明数组包括数组的名字、数组包含的元素的数据类型

double[] scores;
Student[] students;

2、数组的创建

在声明一个数组时,并不在内存中给数组分配任何内存空间,仅仅创建了一个引用数据的存放地址。数组声明的目的只是告诉系统一个新的数组的名称和类型,数组本身不能存放任何数据元素,现阶段的数组值为 null 。因此,使用数组之前,需要先使用new关键字创建数组,为数组分配指定长度的内存空间。

scores = new double[4];

3、数组的初始化

数组创建后,如果不对其进行初始化,系统会根据其类型自动为元素赋值,如果数组元素是引用数据类型,元素的默认初始化是null。可以在声明数组的同时进行初始化,也可以先声明后初始化。

4、数组的使用

(1)数组的长度

scores.length

(2)数组元素的访问

for(int index=0; index < scores.length; index++) {
    ……
}

使用数组时要注意下标值不要超过范围,数组元素的下标从0开始,直到数组元素个数减1为止,如果下标超过范围,则运行时会产生"数组访问越界异常"

(3)数组的复制

可以把一个数组的变量赋值给另一个数组,但是两个变量引用的都是同一个内存地址空间,因此,如果改变一个数组的值,另一个数组变量也会改变。

int[] num = {4,2,3,1,9,0};
int[] numcopy = num;
numcopy[2] = 2;

// num[2] = 2;

如果要将数组中元素的值复制给另外一个元素,又不想改变原数组的值,可以用System类中的arraycopy()方法:

System.arraycopy(src,srcPos,dest,destPos,length)

从src数组中的srcPos位置复制length个元素到dest数组的destPos开始位置。并且,src和dest指向两个不同的内存空间。

 

二、多维数组

多维数组其实是数组的数组,由于多维数组的元素也是数组,所以需要为数组元素分配相应的存储空间,分配空间可以在创建数组的同时进行,也可以用new运算符为数组元素分配内存。

如果多维数组中的每维数组的长度不同,就造成数组空间的分配不连续。当然,一维数组的空间仍然是连续分配的。

以二维数组为例,说明二维数组如何进行定义、创建和使用等:

1、二维数组的声明

double[][] scores;

2、二维数组的初始化

二维数组的初始化可以通过 new 关键字初始化,或在声明的同时使用赋值语句初始化。

(1)用new关键字初始化

scores = new double[4][3];

表明scores数组是一个4行3列的数组,初始化时每个元素均为0.0;

二维数组的元素是一维数组,因此,初始化也可以各行单独进行。

double[][] scores;
score = new double[3][];
score[0] = new double[3];
score[1] = new double[2];
score[2] = new double[4]; 

(2)用赋初值的方法初始化

double[][] scores = {{56,48,96},{100,78},{99,63,79,45}};

3、二维数组的使用

二维数组使用两个下标,一个表示行,一个表示列,每个下标的类型都是 int 类型,而且都是从0开始的。可以通过元素在数组中的行号和列号访问元素。

可以通过length来获取二维数组的行数和每行包含的元素个数:

数组.length // 获得数组的行数
数组[行号].length  //获得数组指定行号的列数

 

三、数组类

Java的工具包util中提供了工具类Arrays,可以方便地进行数组的操作(如搜索和排序等)。

Arrays提供几个基本方法:

1、equals():用于比较两个数组是否相等

2、fill():用于以某个数值填充整个数组

3、sort():用于对数组排序

4、binarySearch():用于在已经排序的数组中查找元素

5、asList():接受任意的数组为参数,并将其转变成List容器

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值