43-数组和理解数组
数组是相同类型的,用一个标识符封装到一起的基本类型数据序列或对象序列。是一个简单的线性序列。
数组根据维数分为一维、二维、多维数组:
- 一维数组是线性
- 二维数组的每个元素是一维数组
- 三维数组每个单元是二维数组
- N维数组每个单元是N-1维数组
44-一维数组
一维数组实际上是一组相同类型的数据的集合,当需要在程序中处理一组数据或者传递一组数据时,可以应用这组类型的数据。
数组是有类型区分的,数组里面所有的单元都是同一个类型的。
声明一维数组
int arr[];
int[] arr2;Code language: CSS (css)
Java中可以使用这两种方式来声明。注意这里是变量的名称是 arr 和 arr2,而不是 arr[]。
注意声明的时候 [] 中括号中间不要有数字,只是在分配空间 new 的时候指定数组长度。
分配空间
声明数组后还不能访问它任何元素,因为声明数组仅仅是给出了它的名称和类型,要想真正使用数据还要为它分配内存空间,且分配内存空间必须指明数组的长度。
int arr[];
arr = new int[5];Code language: JavaScript (javascript)
也可以连在一块写:
int[] arr = new int[6];Code language: JavaScript (javascript)
数组中的每个单元都有一个对应的下标,下标是从0开始的。
初始化一维数组
int[] arr = new int[]{1,2,3,4,5};Code language: JavaScript (javascript)
声明了一个数组并且分配了空间,空间的大小不能直接指定,而是靠后面的初始化的数来决定数组的长度。
int[] arr2 = new int[5]{1,2,3,4,5}; //错误写法
int[] arr2 = new int[]{1,2,3,4,5}; //正确写法Code language: JavaScript (javascript)
如果没有初始化只是分配空间,则默认里面的值是该类型的默认值:
int arr[] = new int[5];
//这个时候访问arr[0]结果是0Code language: JavaScript (javascript)
初始化的时候也可以省略 new:
int[] arr2 = {1,2,3,4,5};
示例代码
int a = 1;
int arr[]; //数组的名称是arr 不是arr[]
int[] arr2;
arr = new int[5];
//a = arr[0];
System.out.println(arr[0]); //如果访问一个没有给初值只是分配空间的数组 则里面每个单元的值就是数组类型的默认值
boolean brr[] = new boolean[2];
System.out.println(brr[0]); //boolean类型的默认值是false
arr2 = new int[] {1,2,3,4,5}; //如果有初始化值 则不需要指定长度 长度根据后面的元素确定
int[] arr3 = {1,2,3,4};
System.out.println(arr3[4]); //这里会报ArrayIndexOutOfBoundsExceptionCode language: JavaScript (javascript)
练习一下
使用foreach统计int数组的总和和获取最大的元素:
public static void main(String[] args) {
int[] arr = {432,23,342,12,4323,43,23432,23,4};
int sum = 0;
int max = 0;
for (int x : arr) {
max = x > max ? x : max;
sum += x;
}
System.out.println("总和是:" + sum);
System.out.println("最大数是:" + max);
}Code language: JavaScript (javascript)
45-多维数组
二维数组和多维数组都称为多维数组。二维数组就是它里面的每个元素是一个一维数组。
二维数组的创建
int arr[][];
int[][] arr2;Code language: CSS (css)
二维数组分配内存
int arr[][] = new int[2][3];Code language: JavaScript (javascript)
上面这个就是一个一维数组,每个元素是一个3个元素的一维数组。
还可以让二维的每个元素长度不一样:
int arr[][] = new int[2][];
arr[0] = new int[2];
arr[1] = new int[3];Code language: JavaScript (javascript)
上面意思就是每个元素的一维数组个数不一样。
二维数组的初始化
int arr[][] = {{2,3},{2,3,4}};
里面两个一维数组,一个长度2,一个长度3。下标也是从0开始的,所以当我们要访问第一个元素就是 arr[0][0],就是2了。
练习一下-遍历二维数组
int arr[][] = new int[2][3];
int[][] arr2 = new int[2][];
arr2[0] = new int[3];
arr2[1] = new int[4];
int arr3[][] = {{2,3},{2,3,4}};
System.out.println(arr3[0][0]);
for (int i = 0; i < arr3.length; i++) {
for (int j = 0; j < arr3[i].length; j++) {
System.out.println(arr3[i][j]);
}
}Code language: JavaScript (javascript)
46-数组的内置方法使用
Java中提供 Arrays 的静态方法来操作数组,需要引入包:
import java.util.Arrays;Code language: CSS (css)
1. fill() 填充数组的元素
int[] arr = new int[5];
Arrays.fill(arr, 8);
System.out.println(arr[4]);Code language: JavaScript (javascript)
可以只填充一部分:
int[] arr = new int[5];
Arrays.fill(arr, 1, 4, 8); //下标从1到4但不包括4
System.out.println(arr[3]);Code language: JavaScript (javascript)
2. sort() 排序方法
int[] arr = {3434,34,2,43,23,234,43,32};
Arrays.sort(arr); //升序排列 小的在前
for (int x : arr) {
System.out.println(x);
}Code language: JavaScript (javascript)
3. copyOf() 复制数组
完全复制一模一样的,长度也一样:
int[] arr = {3434,34,2,43,23,234,43,32};
int[] newArr = Arrays.copyOf(arr, arr.length);
for (int x : newArr) {
System.out.println(x);
}
也可以复制一部分,如果比它大则用0来填充,如果比他小则截取一部分:
int[] arr = {3434,34,2,43,23,234,43,32};
int[] newArr = Arrays.copyOf(arr, 3);
for (int x : newArr) {
System.out.println(x);
}