Java中的数组

简介: Java中的数组

Java中的数组
数组是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来来确定数组中唯一的元素,根据数组的维度,可以将其分为一维数组,二维数组和多维数组等。

数组具有以下三个基本特性:

一致性:数组只能保存相同数据类型元素,元素的数据类型可以是任何相同的数据类型。
有序性:数组中的元素是有序的,通过下标访问。
不可变性:数组一旦初始化,则长度(数组中元素的个数)不可变。
数值型数组元素默认值为0,而引用元素的默认值为null;数组的索引从0开始,到n-1(n为数组的长度);数组元素可以使任何类型,包括数组类型;数组类型是从抽象基类Array派生的引用类型。

注意:Java数组的工作原理跟C/C++数组不同,有兴趣的朋友可以查阅资料进行了解。

数组是引用数据类型,引用数据类型在使用之前一定要声明和初始化,下面将详细讲解一维数组的创建和初始化

创建一维数组
声明一维数组的语法格式为:

type[] arrayName;    //数据类型[] 数组名

或者

type arrayName[];    //数据类型 数组名[]

对于以上两种声明语法,Java更推荐使用第一种声明格式,因为第一种格式不仅具有更好的语义,而且具有更好的可读性。 对于第一种格式type[] arrayName,很容易理解这是定义一个变量,其中变量名是 arrayName,而变量类型是 type[]。 但第二种格式type arrayName[]的可读性就差了,看起来好像定义了一个类型为 type 的变量,而变量名是 arrayName[],这与真实的含义相去甚远。

有些朋友喜欢第二种声明方式,可能是因为曾经看过某些早期的计算机读物误导,从现在开始最好不要用这种糟糕的方式了。因为当下越来越多的语言不再支持 type arrayName[]这种数组声明语法(比如说C#)。

以上两种格式都可以声明一个数组,其中数据类型既可以是基本数据类型,也可以是引用数据类型。数组名可以是任意合法的变量名,示例:

int[] score;    // 存储学生的成绩,类型为整型
double[] price;    // 存储商品的价格,类型为浮点型
String[] name;    // 存储商品名称,类型为字符串型

在声明数组时不需要规定数组的长度,例如:

int score[10];    //这是错误的

分配空间
声明了数组,只是得到了一个数组的引用变量,并没有在堆中为数组分配内存空间,不能使用。

简单地说,分配空间就是要告诉计算机在内存中为它分配几个连续的位置来存储数据。在Java中可以使用new关键字来给数组分配空间。语法格式如下:

arrayName = new type[size];    // 数组名 = new 数据类型[数组长度];

其中,数组长度就是数组中能存放的元素个数,示例:

score = new int[10];
price = new double[30];
name = new String[20];

其中的数组名(score,price,name)是已经声明过得数组变量,当然也可以在声明数组时就给它们分配空间,语法格式如下:

type[] arrayName = new type[size];    // 数据类型[] 数组名 = new 数据类型[数组长度];

示例:声明并分配一个长度为5的int类型数组arr,代码如下:

intp[] arr = new int[5];

执行后arr数组在内存中的格式如图所示。

image.png

在图中arr为数组名称,方括号“[]”中的值为数组的下标。数组通过下标来区分数组中不同元素,并且下标是从0开始的。因此这里包含5和元素的arr数组最大下标为4 。

初始化数组
Java语言中数组必须先初始化,然后才可以使用。所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初值。

初始化数组有以下3种方式

1)使用 new 指定数组大小后进行初始化

type[] arrayName = new int[size];

创建数组之后,系统将为数组元素分配初值。分配初始值原则如下:

数组元素的类型是基本类型中的整数类型(byte、short、int 和 long),则数组元素的值是 0。
数组元素的类型是基本类型中的浮点类型(float、double),则数组元素的值是 0.0。
数组元素的类型是基本类型中的字符类型(char),则数组元素的值是‘\u0000’。
数组元素的类型是基本类型中的布尔类型(boolean),则数组元素的值是 false。
数组元素的类型是引用类型(类、接口和数组),则数组元素的值是 null。
也可以通过下标自己为数组元素赋初值。

示例: 创建包含 5 个元素的 int 类型的数组,然后分别将元素的值设置为 1、2、3、5 和 8。代码如下:

int[] number = new int[5];
number[0] = 1;
number[1] = 2;
number[2] = 3;
number[3] = 5;
number[4] = 8;

2)使用 new 指定数组元素的值
可以在创建数组的同时为数组元素分配初值,语法如下:

type[] arrayName = new type[]{值 1,值 2,值 3,值 4,• • •,值 n};

示例:

int[] number = new int[]{1, 2, 3, 5, 8};

上述代码效果等价于第一个示例。

3)直接指定数组元素的值
在上述两种方法中,type可以省略,如果已经声明数组变量,那么直接使用这两种方式进行初始化。除此之外,还有一种方式,type不可以省略,语法如下:

type[] arrayName = {值 1,值 2,值 3,...,值 n};

示例:

int[] number = {1,2,3,5,8};

上述代码效果等价于前两个示例。
使用这种方式时,数组的声明和初始化操作要同步,即不能省略数组变量的类型。下面代码就是错误的:

int[] number;
number = {1,2,3,5,8};

获取元素
获取数组元素的方法非常简单,指定元素所在数组的下标即可。语法如下:

arrayName[index];

其中,arrayName表示数组变量,index表示下标,下标为0表示获取第一个元素。当指定的下标超出数组的总长度时,会抛出ArrayIndexOutOfBoundsException异常。

示例: 获取 number 数组中的第一个元素、最后一个元素和第六个元素,并将元素的值输出。代码如下:

int[] number = {1,2,3,5,8};
System.out.println("获取第一个元素:"+number[0]);
System.out.println("获取最后一个元素:"+number[number.length-1]);
System.out.println("获取第6个元素:"+number[5]);

执行代码,输出结果如下:
获取第一个元素:1
获取最后一个元素:8

java.lang.ArrayIndexOutOfBoundsException: 5

我们一共存入了 5 个值,所以下标的取值为 0~4。因为 number[5] 取出的内容超过了这个下标,所以输出结果会提示数组索引超出绑定异常(ArrayIndexOutOfBoundsException)。这一点是在使用数组中是经常出现的问题,大家在编写程序时应该引起注意。

遍历数组元素
获取全部元素——使用循环语句。

使用for循环语句遍历number数组中的全部元素,并将元素值输出。代码如下:

int[] number = {1,2,3,5,8};
for (int i=0;i<number.length;i++) {
    System.out.println("第"+(i+1)+"个元素的值是:"+number[i]);
}

除了使用for语句,还可以使用foreach遍历数组中的元素,并将元素的值输出,代码如下:

for(int val:number) {
    System.out.print("元素的值依次是:"+val+"\t");
}
目录
相关文章
|
3月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
2月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
4月前
|
存储 Java 索引
java 数组
在 Java 中,数组是一种数据结构,用于存储多个相同类型的数据元素。数组的大小一旦创建后就不能改变,因此它是固定长度的。Java 数组是一种 对象,即使它存储的值是基本类型(如 int、double 等),它也是一个对象引用。
139 0
|
10月前
|
存储 Java 索引
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
|
6月前
|
存储 人工智能 Java
打乱数组内容引发的问题( Java)
本文介绍了两种实现数组随机打乱的方法,并深入探讨了Java中原始数据类型与对象类型的差异。方法一通过自定义随机数交换数组元素位置,方法二借助`Collections.shuffle()`函数完成数组打乱。同时,文章详细解析了`int`和`Integer`的区别,包括声明方式、内存占用、初始化以及对象特性等,并讲解了自动装箱与拆箱的功能,帮助读者更好地理解Java的基础知识。
110 0
|
8月前
|
人工智能 Java
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
579 1
Java 中数组Array和列表List的转换
|
8月前
|
存储 监控 Java
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
191 23
|
8月前
|
存储 Java 索引
Java 复制数组
本文介绍了Java中数组的基础知识与常用操作,包括数组的概念、创建、访问元素、遍历、复制、排序和搜索等方法。同时详细讲解了数组的五种赋值方式,并通过代码示例演示了求总和平均值、最大最小值、升序降序排序及Arrays类的常用方法。内容深入浅出,适合初学者学习掌握Java数组的核心功能与应用场景。
118 2
|
7月前
|
存储 Java 数据挖掘
Java 中数组的多种定义方式
本文深入解析了Java中数组的多种定义方式,涵盖基础的`new`关键字创建、直接初始化、动态初始化,到多维数组、`Arrays.fill()`方法以及集合类转换为数组等高级用法。通过理论与实践结合的方式,探讨了每种定义方法的适用场景、优缺点及其背后的原理,帮助开发者掌握高效、灵活的数组操作技巧,从而编写更优质的Java代码。
361 0
下一篇
oss云网关配置