Java数组
一.数组的基本用法
1、数组的定义
以下有几种定义数组的方式
(1)数据类型[ ] 数组名称 = {初始化数据};
示例如下:
int[] arr1 = {1,2,3};
(2)数据类型[ ] 数组名称 = new 数据类型[ ]
示例如下:
//初始化一个{0,0,0}的数组
int[] arr2 = new int[3];
(3)数据类型[] 数组名称 = new 数据类型[ ] {初始化数字}
示例如下:
int [] arr3 = new int[]{4,5,6};
其中第一种定义数组的方式是最常用的
2、数组的基本使用
以数组 int arr[] = {1,2,3}; 作为示例
(1)获取数组的长度
语法为: 数组名.length
例如 arr.length
返回的是数组的长度,此处返回为3
(2)访问数组的元素
语法为:数组名[序号] = 值;
例如 arr[0] = 100;
把原来1 的值改成 100
(3)下标越界
下标访问操作的有效范围为[0,length-1],若超出访问的范围就会发生下标越界异常
例如 要打印arr[100],就会发生下标越界的异常
(4)遍历打印数组
①for循环
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
②for-each遍历数组(增强for循环)
for (int i : arr) {
System.out.print(arr[i] + " ");
}
第一种和第二种的区别主要是:for循环可以拿到数组的下标,for-each拿不到数组的下标
③借助Java操作数组的工具类Arrays
用之前先导包 import java.util.Arrays;
//将参数的数组以字符串的形式进行输出
String ret = Array.toString(arr);
Ststem.out.println(ret);
二.数组作为方法的参数
Java里面的数组属于对象,当我们定义一个数组的时候,如 int[] arr1 = {1,2,3,4,5,6};
其中它的数组名 arr1 是引用变量(引用 指向 一个对象)存放在“栈”里面,它保存的是指向对象的地址,{1,2,3,4,5,6}是一个对象,它放在“堆”里面
画图理解一下:
而 int[] arr2 = null; 这个引用 不指向 任何的对象,不会为其分配内存
参数传数组类型的实例:
public static void main(String[] args) {
int arr = {1,2,3,4,5,6};
print(arr);//按引用传递,也可以叫做按值传递,传递的值是数组的地址
}
public static void print(int[] arr) {
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i] + " ");
}
System.out.println();
}
三.二维数组
1、定义方式
(1) 数据类型[ ][ ] 数组名称 = {初始化数据};
示例如下:
int[][] arr1 = {{1,2,3},{4,5,6}};
(2)数据类型[ ][ ] 数组名称 = new 数据类型[ ][ ]{初始化数据};
示例如下:
int [][] arr2 = new int[][]{{1,2,3},{4,5,6}};
(3)数据类型[ ][ ] 数组名称 = new 数据类型[行数][列数 ];
示例如下:
int [][] arr3 = new int[2][3];
2、打印二维数组
二维数组实际上是一个特殊的一维数组,在Java里面可以体现得淋漓尽致
例如,int[ ][ ] arr = {{1,2,3},{4,5,6}}; 是以下图的方式保存的
所以其打印的方式为:
import java.util.Arrays;
public class Main{
public static void main(String[] args){
int [][] arr = {{1,2,3},{4,5,6}};
//验证
System.out.println(arr.length);
System.out.println(arr[0].length);
//(1)for循环打印数组
for(int i = 0; i < arr.length; i++){
for(int j = 0; j < arr[i].length; j++){
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
System.out.println("===============");
//(2)for-each打印数组
for (int[] ret : arr){
for(int x : ret){
System.out.println(x + " ");
}
}
System.out.println("===============");
//(3)引用Arrays包
System.out.println(Arrays.deepToString(arr));
}
}
3、不规则的二维数组
例如:
int[][] arr = new int[2][];//Java可以省略列,不能省略行
arr[0] = new int[3];
arr[1] = new int[2];
图示为: