Java中的数组
如何在Java中定义和处理数组数据结构。
数组是Java对象的一种特殊形式,用于存储元素的同构列表(向量的每个元素都具有与向量类型相同的类型— 基元数据类型。
数组中元素的数目是固定的,它定义了数组的长度。
从语法和逻辑的角度来看,java中的数组与C或C++中的数组是相同的。实现上有差异,但对程序员来说是透明的,我们不会注意到它们:
在Java中,数组是一种特殊的对象,array类的实例;
Java允许使用索引操作符[]
,来访问数组元素;
new运算符(用于构建对象和在堆中分配空间)接受数组大小作为参数;
因为数组是对象,程序员可以访问属性 length来获得数组大小(比C或C++更大的优势,因为我们不再需要用另一个变量来管理它的大小);
如何在Java中定义数组
在Java中定义数组的语法:
base_type[] array_name; base_type array_name[]; //类似于C/C++的风格
重要根据定义,array_name是一个未初始化的类型引用(指针)变量,默认值为null。null是一个Java关键字,表示一个不存在的地址,其值等于0。
// 使用Java的推荐语法定义数组 int[] intValues ; // 使用 C/C++ 类型的语法定义数组 long longValues[];
如何在Java中初始化数组
因为它们是对象,所以数组值存储在堆中(具有动态分配的RAM内存区域,在该区域中进程可以在运行时保留空间),一个数组按3个步骤初始化:
定义数组;
预留空间;
初始化 项值
(可选,因为在内存分配过程中,元素会得到与数组 基元数据类型相关联的默认值——对于基元数据类型检查和引用,默认值为 null
在本教程中,将用基元值来分析数组,在我们看到类和对象相关的概念之后,我们将分析对象数组。
// 使用Java推荐的语法定义数组 int[] intValues; // 使用 C/C++ 类型的语法定义数组 long longValues[]; //分配空间-数组初始化 intValues = new int [10]; // 10 个元素,值都为 0 longValues = new long [5]; //5 个元素,值都为 0
单独的元素的初始化可以使用运算符[]。
( 注意!用于访问元素的索引的值在[0,length-1]直接)
intValues [0] = 10; // 初始化第1个元素 intValues [1] = 20; // 初始化第2个元素 intValues [2] = 30; // 初始化第3个元素
如果我们知道数组的值,则可以通过一条指令执行对象实例化和初始化:
base_type[] array_name = {value1, value2, …, valueN);
例如:
//分配空间+定义+初始化 // 具有char数据类型值的五个元素的数组 char[] charValues = {'H','e','l','l','o'};
如何在Java中访问和处理数组
访问数组元素可以使用[]
运算符。
注意用于访问元素的索引只能是[0,length-1]之间的值。
数组中的项数是通过访问其属性 length来确定的(在Java中,数组是array类型的对象)。
char[] charValues = {'H','e','l','l','o'}; // 查看数组的长度 int charNumber = charValues.length; // 修改第1个元素的数值 charValues[0] = 'H';
下面的示例使用1到10的值初始化数组元素,然后在控制台上打印它们。
int[] intValues = new int[10]; for(int i=0;i < intValues.length;i++) intValues[i] = i+1; //enhanced for for(int value:intValues) System.out.println(value);
注意用于访问元素的索引只能是[0,length-1]之间的值。否则会出现运行时异常,如 ArrayIndexOutOfBoundsException:
char[] charValues = {'H','e','l','l','o'}; charValues [ 5 ] = '!';
运行时报错:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5