外观
5 数组
1313 字约 4 分钟
2024-09-01
数组:可以存放多个同一类型的数据。数组也是一种数据,是引用类型。
即:数组就是一组数据。
5.1 一维数组
数组可以是多个相同类型数据的组合,实现对这些数据的统一管理。
数组中的元素可以是任何数据类型。包括基本类型和引用类型。
数组的下标从 0 开始。且必须在指定范围内使用,否则报错。
数组属于 引用类型,数组型数据是 对象(Object)
数组创建后,如果没有赋值,有默认值:int(0),short(0),byte(0),long(0L),float(0.0F),double(0.0),char(\u0000),boolean(false),String(null),Object(null)
数组的构造方法:
使用数组的步骤:1.声明数组并开辟空间 2.给数组各个元素赋值 3.使用数组
构造方式1:动态初始化
int[] ints = new int[5]; // 创建了数组 name,存放5个int int ints2[] = new int[1]; // 这种写法也行 ints[2] = 15; // 访问数组第3个数JAVA
构造方式2:动态初始化
char[] chars; // 先声明数组 name,此时数组是 null chars = new char[2]; // 分配内存空间,可以存放数据了 chars[1] = '\t';JAVA
构造方式3:静态初始化
boolean[] bools = {true, false, true, false}; String[] strs = new String[]{"阿伟,你又在打电动噢", "烦啦"};JAVA
确切知道数组每个元素的场合可以用这个方法。
数组的使用方法:
访问数组元素:
数组名[元素下标]
其中,元素下标从 0 开始编号。如:访问 strs 数组的第一个元素
strs[0]
数组长度:
数组名.length
是一个 int 值。不能通过试图改变该值来改变数组容量
5.1.1 数组赋值机制
基本数据类型赋值,赋值方式是值拷贝。这个值就是具体的数据,且互不影响
数组在默认情况下是引用传递,赋的值是地址,赋值方式为引用传达。
int[] array1 = {0, 0, 0}; int[] array2 = array1; array2[0] = 100;JAVA
上述情况下,
array1[0]
也会变成100
。因为数组在 JVM 的 栈 里是一个地址,指向 堆 里的一个空间。这两个数组在上述情况下指向同一空间。int[] array1 = {0, 0, 0}; int[] array2 = new int[array1.length]; for (int i = 0;i < array1.length;i++) { array2[i] = array1[i]; }JAVA
上述方式拷贝后,两数组相互独立。
5.1.2 数组的扩容
当数组达到上限时,创建一个容量更大的新数组。将旧数组的元素依次放入,之后替换旧数组。
以下是一个扩容方法:
import java.util.Scanner;
public class Code5_1_3{
public static void main(String[] args){
Scanner inP = new Scanner(System.in);
int[] arr1 = {1, 2, 3}; // 这是原数组
int add = 0; // 这个变量记录输入的新元素的值
int count = arr1.length; // 这个变量是新数组的长度
char yN = 'a'; // 记录询问继续与否时用户的输入字符
do{
/* 创建多一位的新数组,把新元素赋给新数组的最后一位 */
System.out.println("请输入添加数字:");
add = inP.nextInt();
int[] tem = new int[arr1.length + 1];
tem[count] = add;
/* 把旧数组的值全部赋给新数组 */
for(int i = 0; i < arr1.length; i++){
tem[i] = arr1[i];
}
/* 把新数组保存下来,输出现在的数组 */
arr1 = tem;
count++;
System.out.println("\n\n当前数组为:");
for(int i = 0; i < arr1.length; i++){
System.out.print(arr1[i] + " ");
}
/* 询问是否继续添加,输入n跳出,否则循环 */
System.out.println("\n\n是否继续添加?(Y/N)");
yN = inP.next().charAt(0);
}while(yN != 'N' && yN != 'n');
}
}JAVA
5.2 二维数组
int[][] ints; // 声明一个二维数组
int[] ints2[]; // 也能这样声明
int ints3[][]; // 这样也行
int[] x,y[]; // 声明了两个数组,一个是 int[] x 一个是 int[][] y
// 把 int[] 视作一个类型,就能很好地理解这个写法JAVA
二维数组实际是由多个一维数组组成的,它的各个元素的长度可以相同,也可以不同。
数组是一个对象,所以二维数组的元素存放的是一维数组的地址。
二维数组构造方法:
构造方法1:动态初始化
int[][] many_ints = new int[3][4] // 创建 有3个 包含4个元素的一维数组 的二维数组 JAVA
构造方法2:动态初始化
double[][] many_doubles; // 先声明变量 many_doubles = new double[3][4]; // 再开辟空间JAVA
构造方法3:动态初始化-列数不确定
char[][] many_chars = new char[3][]; // 创建一个三行列数不确定的二维数组 for (int i = 0; i < 3; i++) { many_chars[i] = new char[i + 1]; // 此时,每个数组空间依次增大 }JAVA
构造方法4:静态初始化
int[][] many_many = {{1, 3}, {4, 10, 2}, {95}}; JAVA
二维数组使用方法:
ints.length
:该二维数组的长度,这里是 3ints[0]
:该二维数组的第一个子数组ints[0].length
:该二维数组的第一个子数组的长度,这里是 4ints[1][0]
:该二维数组第二个子数组的第一个元素的值,这里是 21
这是一维数组:int[] a、这是二维数组:int[][] b。好了,现在来写一个堆排序吧