Java面向对象基础
第七章 二维数组
一、Arrays类的应用
1、Arrays类的各种方法
如果直接使用System.out.println()将数组再控制台进行输出,是无法得到该数组的每一个元素的值,而得到的是形如[I@1c4af82c这样的结果。
为了能够更加快速的在控制台上输出该数组中的每一个元素的值,Java提供了一个Java.util.Arrays的工具类,来能帮助我们对数组进行快速的操作。
2、Arrays类方法的代码实现
int[] score = {67, 2, 75, 21, 89};
int[] arr1 = {1,6,89,5};
int[] arr2 = {1,6,89,5,6};
int[] arr3 = {1,6,789,5,6};
//控制台输出 toString()方法
System.out.println("数组score为:"+Arrays.toString(score));
//排序 sort()方法
Arrays.sort(score);
System.out.println("数组score排序后为: "+Arrays.toString(score));
//判断是否相等 equals()方法
boolean isEquals = Arrays.equals(arr1, arr2);
System.out.println("arr1和arr2相等: "+isEquals);
//快速填充 fill()方法
Arrays.fill(arr3, 100);
System.out.println("经过替换后,arr3的值为: "+Arrays.toString(arr3));
//复制一个数组 copyOf()方法
int[] arr4 = Arrays.copyOf(arr1, 3);
System.out.println("复制arr1中3个元素的arr4数组为: "+Arrays.toString(arr4));
//当复制的个数大于数组总长度时:
//多出的元素就会用默认值填充
int[] arr5 = Arrays.copyOf(arr1, 5);
System.out.println("复制arr1中3个元素的arr4数组为: "+Arrays.toString(arr5));
//查询元素下标的值 binarySerach()
//要求,所要查找的数组必须为从小到大排好的;
System.out.println("score数组中是否存在6这个元素: "+Arrays.binarySearch(score, 2));
二、二维数组
1、语法格式
数据类型[ ] [ ] 数组名;
或者
数据类型 数组名[ ] [ ];
int [ ][ ] scores; //定义二维数组
scores=new int[5][50]; //分配内存空间
//或者
int [ ][ ] scores = new int[5][50];
(1)数据类型为数组元素的类型;
(2)“[][]”用于表示定义了一个二维数组,通过多个下标进行数据访问。
(3)数组是一个引用数据类型。
(3)Java中只有一维数组。虽然从语法上看Java支持多维数组,但从内存分配原理来看,Java只有一维数组,没有多维数组。
2、二维数组与内存
二维数组实际上是一个一维数组,它的每个元素又是一个一维数组。
3、二维数组的初始化
4、二维数组的遍历
//初始化一个int[]类型的二维数组
//第一个[]表示最外层的数组,而第二个[]则表示该数组中每个元素的数组
//创建二维数组,外层为3,内层不确定
int[] [] numss = new int[3][];
//创建一维数组
int[] nums1 = {5,6,8,4,6};
numss[0] = nums1;
int[] nums2 = {7,6};
numss[1] = nums2;
int[] nums3 = {5,6,8};
numss[2] = nums3;
//要想获得二维数组中的某个值,必须首先确定外面数组的下标,再确定内层的数组下标
int num = numss[0][2];
System.out.println(num);
//循环遍历二维数组
//首先循环外层,再循环内层
for(int i = 0;i<numss.length;i++) {
//根据外层数组的下标,获得该元素上所存储的内存数组
int[] nums = numss[i];
for(int j =0;j<nums.length;j++) {
System.out.print(nums[j]);
}
}
5、二维数组元素的默认初始值
引用数据类型的默认值都是null。
因此可得:
针对第一种:int[][] arr = new int[4][3];
外层元素的初始化值为:地址值
内层元素的初始化值为:与一维数组初始化情况相同。
针对第二种:int[][] arr = new int[4][];
外层元素的初始化值为:null
内层元素的初始化值为:不能调用,否则报错。