跳到主要内容

数组的使用

声明

建议语法: 类型[] 变量名 = new 类型[个数];

public class Main {
public static void main(String[] args) {
int[] arr = {1,1,4,5,1,4};
int[] arr2 = new int[]{1,1,4,5,1,4};
int[] arr3 = new int[6];
arr3 = new int[3];
// arr3 = {1,2,3}; // 报错
}
}
java

内存模型

不论是 int[] arr = {1,1,4,5,1,4}; 还是 int[] arr2 = new int[]{1,1,4,5,1,4}; 都是在栈上使用一个引用, 指向在堆上new的内存空间.

##container##
Clip_2024-02-21_20-07-09.png ##w800##

基本类型的数组的默认值

双精度浮点数数组中的默认值为0.0,
单精度浮点数数组中的默认值为0.0f。
boolean类型数组默认元素为false。
char类型数组中的默认元素为'\u0000',
整形数组默认元素为0
class类型的数组的默认值是null

思考

char[] sexArr = {'M', 'F', 'O'}; 和 char[] sexArr = new char[]{'M', 'F', 'O'};有什么区别?

第一种方式只能在定义数组同时赋值时使用,第二种方式可以在定义数组时直接使用,也可以先定义数组,然后再赋值时使用

遍历

C++没什么两样

public class Main {
public static void main(String[] args) {
int[] arr = new int[] {1,2,3,4,5,6,8,-1, -2, -100, 100, 0};
int max = arr[0];
for (int it : arr) {
max = (max < it ? it : max);
}
System.out.println("数组的最大值为: " + max);

int min = arr[0];
for (int i = 0; i < arr.length; ++i) {
min = (min > arr[i] ? arr[i] : min);
}
System.out.println("数组的最小值为: " + min);
}
}
java

长度不变性

数组的长度是不能变的, 除非重新分配 arr = new int[6];

插入

所以插入, 只能手动扩容, 然后遍历再移动

public class demo_2 {
public static void main(String[] arg) {
int[] arr = new int[]{1,2,3,4,5};
int add = 6; // 插入一个元素 6
int[] arr_new = new int[arr.length + 1];
for (int i = 0; i < arr.length; ++i) {
arr_new[i] = arr[i];
}
arr_new[arr.length] = add;

for (int it : arr_new)
System.out.println(it + " ");
}
}
java

删除也一样

(会cpp 的 dddd)

常用类方法

数组拷贝

/**
* 源数组(source):要复制元素的源数组。
* 源数组的起始位置(srcPos):指定从源数组的哪个索引位置开始复制元素。
* 目标数组(destination):要将元素复制到的目标数组。
* 目标数组的起始位置(destPos):指定从目标数组的哪个索引位置开始存放复制的元素。
* 要复制的元素个数(length):指定要复制的元素个数。
*/
public static void arraycopy(Object source, int srcPos, Object destination, int destPos, int length)

System.arrayCopy(源数组, 拷贝的开始位置, 目标数组, 存放的开始位置, 拷贝的元素个数);
java

示例:

public class demo_2 {
public static void main(String[] arg) {
int[] arr_new = new int[]{1,2,3,4,5,6};
int[] arr = new int[arr_new.length - 1];
int index = 2; // 删除索引为2的位置
System.arraycopy(arr_new, 0, arr, 0, index);
System.arraycopy(arr_new, index + 1, arr, index,arr_new.length - (index + 1));
for (int it : arr)
System.out.println(it + " ");
}
}
java

数组扩容

数据类型[] 标识符 = Arrays.copyOf(原数组, 新数组的长度);
java

示例:

import java.util.Arrays;

public class demo_3 {
public static void main(String[] arg) {
int[] arr = {1,1,4,5,1,4};
int[] arr_new = Arrays.copyOf(arr, arr.length + 1);
for (int it : arr_new)
System.out.print(it + " ");
}
}
java

数组的排序

Arrays.sort(数组名); //将数组中的元素进行升序排列
java
import java.util.Arrays;

public class demo_3 {
public static void main(String[] arg) {
int[] arr = {1,1,4,5,1,4};
Arrays.sort(arr);
for (int it : arr)
System.out.print(it + " ");
}
}
java

组装为字符串

Arrays.toString(数组名);//将数组中的元素组装为一个字符串
java
请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...