Java基础:数组
Java基础:数组
数组的定义
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成
- 其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们
数组声明变量
-
需要先声明数组变量,才能在程序中使用
-
语法
dataType[] arrayRefVar; // 首选的方法 dataType arrayRefVar[]; // 效果相同,但不是首选方法,不推荐
注:dataType arrayRefVar[];
的风格来自 C/C++ 语言,是早期 Java 为让 C/C++ 程序员更容易理解 Java 语言
数组的创建
-
Java语言使用new操作符来创建数组
-
语法
dataType[] arrayRefVar = new dataType[arraySize]; 还可以通过下面这种方式定义数组 dataType[] arrayRefVar = {value0, value1, ..., valuek};
-
数组的元素是通过索引访问的,数组索引从0开始
-
获取数组长度:
arrays.length
-
示例
public class ArrayDemo01 { public static void main(String[] args) { //int[] num; //首选方法 //int num[]; //效果相同,但不是首选方法 int[] num;//声明一个数组 num = new int[10];//创建一个存放10个int类型的数组 num[0] = 1;//给数组中下标为0的元素赋值 } }
内存分析
三种初始化
-
静态初始化
int[] a = {1,2,3}; Man[] mans = {new Man(1,1),new Man(2,2)};
-
动态初始化
int[] a = int new[2]; a[0] = 1; a[1] = 2;
-
数组的默认初始化
- 数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。
-
示例
public class ArrayDemo02 { public static void main(String[] args) { //静态初始化: 创建+赋值 int[] a = {1,2,3,4,5,6};//定义之后数组大小不可改变 System.out.println("a[0] = " + a[0]); //动态初始化: 包含默认初始化 int[] b = new int[10]; b[0] = 10;//除赋值的b[0]以外,其他数组元素默认赋值0 System.out.println("b[0] = " + b[0]); System.out.println("b[1] = " + b[1]); } }
输出
a[0] = 1 b[0] = 10 b[1] = 0
数组的四个基本特点
- 数组的长度是确定的。数组一旦被创建,它的大小就是无法被改变的
- 数组的元素必须是相同类型,不允许出现混合类型
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型
- 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。
数组边界
-
数组下标合法区间:【0,length-1】,如果越界会报错
例如:
public class Demo { public static void main(String[] args) { int[] a = new int[2]; System.out.println(a[2]); } }
-
ArraylndexOutOfBoundsException:数组下标越界异常
数组的使用
For-Each循环
-
JDK 1.5 引进了一种新的循环类型,被称为 For-Each 循环或者加强型循环,它能在不使用下标的情况下遍历数组
-
语法
for (type element: array) { System.out.println(element); }
-
示例
public class ArrayDemo03 { public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; //打印全部的数组元素 for (int x : arrays){ System.out.println(x); } System.out.println("==============="); int sum = 0; //计算全部的数组元素之和 for (int x : arrays){ sum += x; } System.out.println("sum:" + sum); System.out.println("==============="); //查找最大元素 int max = arrays[0]; for (int x : arrays){ if(x > max){ max = x; } } System.out.println("max:" + max); } }
输出
1 2 3 4 5 =============== sum:15 =============== max:5
数组作为函数的参数
-
数组可以作为参数传递给方法
-
示例
public static void printArray(int[] arrays) { for (int x : arrays) { System.out.print(x + "\t"); } }
方法的调用
int[] arrays = {1,2,3,4,5}; printArray(arrays);
数组作为函数的返回值
-
示例
public static int[] reverse(int[] arrays) { int[] result = new int[arrays.length]; for (int i = 0, j = result.length-1; i < arrays.length; i++, j--) { result[j] = arrays[i]; } return result;//返回result数组 }
-
结合For-Each循环、数组作为函数的参数、数组作为函数的返回值的代码示例
public class ArrayDemo04 { public static void main(String[] args) { int[] arrays = {1,2,3,4,5}; printArray(arrays); System.out.println(); //遍历反转的数组 for (int x : reverse(arrays)){ System.out.print(x + "\t"); } } //打印数组元素 public static void printArray(int[] arrays) { for (int x : arrays) { System.out.print(x + "\t"); } } //反转数组元素 public static int[] reverse(int[] arrays) { int[] result = new int[arrays.length]; for (int i = 0, j = result.length-1; i < arrays.length; i++, j--) { result[j] = arrays[i]; } return result; } }
输出
1 2 3 4 5 5 4 3 2 1
二维数组
-
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
-
二维数组
int a[][] = new int[2][5];
-
解析:以上二维数组a可以看成一个两行五列的数组。
-
示例
public class ArrayDemo05 { public static void main(String[] args) { /* 1,2 array[0] 2,3 array[1] 3,4 array[2] 4,5 array[3] */ int[][] array = {{1,2},{2,3},{3,4},{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"); } System.out.println(); } } }
输出
1 2 2 3 3 4 4 5