Java 数组
1. 什么是数组
数组是相同类型的数据按照顺序组成的一种引用数据类型。
Java 中有基本数据类型和引用数据类型两种数据类型。数组就是引用数据类型。
2. 数组声明
在Java语言中,数组声明有两种语法:
- 中括号跟在数据类型后:
DataType[] arrayName;
- 中括号跟在数组名称后:
DataType arrayName[];
其中DataType
是数组中要存放元素的数据类型,例如int
、String
等,arrayName
是数组名称,遵守变量的命名规范。
例如:
// 声明一个int类型的数组,名称为 firstIntArray: int[] firstIntArray; // 推荐写法 int firstIntArray[]; 也可以修改数据类型,以生成其他类型的数组。实例如下: // 声明一个float类型的数组: float[] firstFloatArray; // 声明一个字符串类型的数组: String[] firstStringArray;
3. 数组创建
3.1 先声明再创建
int[] nums; //int nums2[];//1.声明数组 nums = new int [10];//2.创建一个数组 //3.给数组元素中赋值 nums[0]=1; nums[1]=2; nums[2]=3; nums[3]=4; nums[4]=5; nums[5]=6;
3.2 声明时同时创建
//所创建的数组数据类型必须与其声明的数据类型相同。对于其他类型数组的创建 int[] b = new int[10]; //数组的创建使用new关键字,后面跟上一个空格+数据类型+中括号[],中括号中间是数组的长度,这里是必须指定的,它是一个整型的数字。实例如下:
4. 数组初始化
数组创建后,所有元素都初始化为默认值,整型数组的元素都为 0,浮点型都为 0. 0 ,布尔型都为 false
。例如 int[] arr = new int[5];
除了数组的默认初始化,还有另外两种常见形式:
4.1静态初始化
静态初始化数组,就是声明的同时,给数组赋值。
DataType[] arrayName = {元素1, 元素2, 元素3, 元素n}; int[] arr = {1, 2, 3, 4, 5};
4.2动态初始化
动态初始化数组,即数组的声明以及创建是与数组的赋值操作分开进行的。
// 声明并创建数组,长度为3 int[] arr = new int[3]; // 给下标位置0赋值为1 arr[0] = 1; // 给下标位置1赋值为2 arr[1] = 2; // 给下标位置2赋值为3 arr[2] = 3;
5. 数组的操作
5.1 数组元素的引用
语法:数组名[下标],下标从0
开始。有一个整型数组,引用其第一个元素,实例如下:
package com.caq.array; public class TestArray { public static void main(String[] args) { double a[] = {1, 2.4, 555.3, 7764.4}; double total = 0; for (int i = 0; i < a.length; i++) { total = a[i]; System.out.println(total); } } }
5.2 数组元素的修改
public class ArrayDemo1 { public static void main(String[] args) { // 初始化整型数组arr: int [] arr = {1, 2, 3}; // 修改下标为1的元素为4 arr[1] = 4; System.out.println("数组arr中,第二个元素为:" + arr[1]); } }
5.3 获取数组长度
我们可以使用数组的内置属性length
来获取数组的长度,使用点操作符调用其内置属性:arrayName.length
。实例如下:
package com.caq.array; public class TestArray { public static void main(String[] args) { // 初始化整型数组arr: int[] arr = {1, 2, 3}; // 打印数组arr的长度: System.out.println("数组arr的长度为:" + arr.length); } }
有时我们想引用数组中最后一个元素,由于数组下标从0开始,所以最后一个元素的下标为数组的长度减去1,这时可以结合length
属性来进行引用。
package com.caq.array;public class TestArray { public static void main(String[] args) { // 初始化一个char类型的数组: char[] charArr = {'q', 'w', 'e', 'r', 't'}; // 引用最后一个元素: char lastElement = charArr[charArr.length - 1]; System.out.println("charArr数组的最后一个元素为:" + lastElement); }}
5.4 数组的迭代
5.4.1 循环赋值
package com.caq.array;public class TestArray { public static void main(String[] args) { int[] array1 = new int[10]; for (int i = 0; i < array1.length; i++) { array1[i] = i + 1; System.out.print(array1[i]+ "\t"); } }}
5.4.2 增强 for 循环
for(变量声明: 数组或列表) { // 循环体}
public class TestArray { public static void main(String[] args) { // 初始化字符串数组 words String[] words = {"a ", "b ", "c"}; for(String word: words) { System.out.print(word); } }}
5.4.3 数组实例
1.求100以内偶数的和
package com.caq.array;public class TestArray { public static void main(String[] args) { int total=0; int[] words = new int[100]; for (int i = 0; i < words.length; i++) { words[i] = i + 1; if (words[i] % 2 == 0){ total += words[i]; } } System.out.println(total); }}
2.求数组内最大的数
package com.caq.array;public class TestArray { public static void main(String[] args) { int[] maxArray = {1,2,100,20,400,300}; int max = maxArray[0]; for (int i = 0; i < maxArray.length; i++) { if (maxArray[i] > max){ max = maxArray[i]; } } System.out.println(max); }}
6. 多维数组
在Java中,多维数组也是非常常用的数据结构,下面以二维数组为例,介绍二维数组的声明、创建、初始化和引用。
6.1 声明
二维数组有 3 种声明方式:
- 中括号跟在数据类型后:
DataType[][] arrayName;
(最推荐写法) - 中括号跟在数组名后:
DataType arrayName[][];
- 中括号一个在前,一个在后:
DataType[] arranName[];
// 声明一个整型的二维数组int[][] intArray;// 声明一个单精度浮点型的二维数组float floatArray[][];// 声明一个char类型的二维数组char[] charArray[];
6.2创建
二维数组可以想象成一个存放数据的表格,二维数组的创建和一维数组相似。可以声明数组的同时创建:
javaDataType[][] arrayName = new int[行数][列数];DataType[][] arrayName;arrayName = new DataType[行数][列数];
// 声明并创建一个2行3列的数组int[][] intArray = new int[2][3];// 声明一个单精度浮点型的二维数组float floatArray[][];// 创建一个3行3列的二维数组floatArray = new float[3][3];
在创建数组的时候,我们也可以先不指定列的数量,再在后面进行逐行创建。
实例:
// 创建一个3行的二维数组int intArray[][] = new int[3][];// 第一行3列intArray[0] = new int[3];// 第二行2列intArray[1] = new int[2];// 第三行1列intArray[2] = new int[1];
6.3 初始化
多维数组也有静态初始化和动态初始化之分,对于静态初始化,一维数组使用一对大括号{}
包含其元素,而二维数组的初始化可以使用两对大括号包含行数和列数。实例如下:
// 创建一个3行2列的二维数组int[][] intArray = {{1,2}, {3,4}, {5,6}};代码块预览复制12
动态初始化实例如下:
// 声明并创建一个数组int intArray[][] = new int[2][3];// 为第1行第1列的元素赋值:intArray[0][0] = 10;代码块1234
Tips:为数组赋值时,要注意数组的下标索引是从0开始的。
一维数组可以通过length
属性获取元素个数,同样二维数组的行数和列数也可以使用length
属性获取。实例如下:
public class ArrayDemo6 { public static void main(String[] args) { // 初始化一个3行2列的二维数组 int[][] intArray = {{1,2,7}, {3,4}, {5,6}}; // 获取intArray的行数 System.out.println("intArray的行数为:" + intArray.length); // 获取intArray第1行的列数 System.out.println("intArray第一行的列数为:" + intArray[0].length); }}
6.4 二维数组的迭代
一维数组使用单层for
循环就可以遍历,二维数组的遍历需要使用双层嵌套for
循环。
java
复制代码
package com.caq.array;public class ArrayDemo03 { public static void main(String[] args) { //多维数组 int[][] array = {{1, 2}, {2, 3}, {4, 5}};//二维 for (int i = 0; i < array.length; i++) { for (int j = 0; j < array[i].length; j++) { System.out.print(array[i][j] + "\t"); } } }}
7. 小结
- 引用数据类型它在创建时,会在内存中开辟一个连续的空间;
- 数组是同一数据类型的集合。可以使用数组下标来引用数组元素,数组元素的下标都是从0开始,使用下标不要超出范围,否则会抛出异常。
- 可以使用
length
属性获取数组的长度。 - 对于多维数组,实际开发中建议不要使用超过三维的数组,否则会让你的程序难以理解和维护。