数组

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);
}
Previous:
Next:

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注