Java数组深入解析:定义、操作、常见问题与高频练习

一、数组的定义

1. 什么是数组

数组是一个容器,用来存储多个相同类型的数据。它属于引用数据类型,可以存储基本数据类型(如int、char)或者引用数据类型(如String、对象)。

2. 数组的定义方式

a. 动态初始化

动态初始化时,只有数组的长度被定义,数组元素的值在之后可以进行赋值。

java 复制代码
数据类型[] 数组名 = new 数据类型[长度];
数据类型 数组名[] = new 数据类型[长度];

示例:

java 复制代码
// 声明数组
int[] arr;  // 推荐的声明方式
// 或者
int arr[];
// 创建数组arr = new int[5];  // 创建一个长度为5的整数数组

// 声明并初始化数组
int[] arr2 = {1, 2, 3, 4, 5, 6};  // 创建并初始化数组

b. 静态初始化

静态初始化时,数组在创建时就已经有了具体的元素值。

java 复制代码
数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, ...};

不推荐使用这种方式,因为它显得冗长。

c. 简化的静态初始化

简化静态初始化可以在声明时直接指定数组元素,代码更简洁。

java 复制代码
数据类型[] 数组名 = {元素1, 元素2, ...};

示例:

java 复制代码
int[] arr = {1, 2, 3, 4, 5};  // 创建一个包含5个整数的数组
String[] names = {"Alice", "Bob", "Charlie"};

二、数组操作

1. 获取数组的长度

数组的长度可以通过 .length 属性来获取。

java 复制代码
int[] arr = {100, 200, 300};
int length = arr.length;  // 获取数组的长度,值为3

注意,length 后面没有小括号,因为它不是方法,而是数组的一个属性。

2. 数组的索引

数组元素是通过索引来访问的,索引从 0 开始,最大索引为 length - 1。

java 复制代码
int[] arr = {100, 200, 300};
System.out.println(arr[0]);  // 输出 100
System.out.println(arr[1]);  // 输出 200
System.out.println(arr[arr.length-1]);  // 输出 30

3. 存储元素

使用索引将元素存入数组:

java 复制代码
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

4. 获取数组元素

通过索引获取数组中的元素:

java 复制代码
int value = arr[0];  // 获取索引0位置的元素

5. 遍历数组

可以使用 for 循环来遍历数组中的元素:

java 复制代码
// 普通for循环
int[] arr = {10, 20, 30, 40, 50};
for (int i = 0; i < arr.length; i++) {
    System.out.println(arr[i]);  // 打印数组中的每个元素
}

// 增强型for循环
for (int num : arr) {  // 声明一个整数类型的变量 num,用来存储数组中的每个元素
    System.out.println(num);  // 输出每个元素
}

6. 数组的复制

将一个数组的元素复制到另一个数组中:

java 复制代码
int[] arr1 = {1, 2, 3};
int[] arr2 = new int[arr1.length];

for (int i = 0; i < arr1.length; i++) {
    arr2[i] = arr1[i];
}

三、常见问题

1. 数组索引越界异常 (ArrayIndexOutOfBoundsException)

当你访问的索引超出了数组的有效范围时,会抛出该异常。数组索引必须在 0 到 length - 1 之间。

示例:

java 复制代码
int[] arr = {0,1, 2, 3};
System.out.println(arr[4]);  // 会抛出 ArrayIndexOutOfBoundsException

2. 空指针异常 (NullPointerException)

如果你尝试访问一个值为 null 的数组或对象,就会发生空指针异常。

示例:

java 复制代码
int[] arr = null;
System.out.println(arr.length);  // 会抛出 NullPointerException

四、数组常用练习

1. 求数组最大值

通过遍历数组,找出其中的最大值。

java 复制代码
int[] arr = {10, 4, 7, 1, 9};
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
    if (arr[i] > max) {
        max = arr[i];
    }
}
System.out.println("最大值是:" + max);

2. 统计符合条件的数组元素

假设需要统计数组中既能被3整除又能被5整除的元素个数,但不能被7整除。

java 复制代码
int count = 0;
for (int i = 0; i < arr.length; i++) {
    if (arr[i] % 3 == 0 && arr[i] % 5 == 0 && arr[i] % 7 != 0) {
        count++;
    }
}
System.out.println("符合条件的元素个数是:" + count);

3. 通过键盘输入并输出数组

java 复制代码
Scanner sc = new Scanner(System.in);
String[] arr = new String[3];
for (int i = 0; i < arr.length; i++) {
    System.out.println("请输入第" + (i + 1) + "个名字:");
    arr[i] = sc.next();
}
for (String name : arr) {
    System.out.println(name);
}

4. 数组扩容

如果数组的大小不够,可以创建一个新的数组,并将旧数组的元素复制到新数组中。

java 复制代码
int[] oldArr = {1, 2, 3, 4, 5};
int[] newArr = new int[10];
for (int i = 0; i < oldArr.length; i++) {
    newArr[i] = oldArr[i];
}
oldArr = newArr;  // 让旧数组指向新的扩容数组

5. 数组合并

合并两个数组:

java 复制代码
int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};
int[] newArr = new int[arr1.length + arr2.length];

for (int i = 0; i < arr1.length; i++) {
    newArr[i] = arr1[i];
}
for (int i = 0; i < arr2.length; i++) {
    newArr[arr1.length + i] = arr2[i];
}
相关推荐
jioulongzi几秒前
jdk17+springboot3项目加密部署
java
接着奏乐接着舞。19 分钟前
如何在 Three.js 地球飞线中间生成卡片
开发语言·javascript·ecmascript
阿泽不想掉光头发36 分钟前
C#实现调用DLL 套壳读卡程序(桌面程序开发)
java·开发语言·后端·websocket·http·c#
bglmmz42 分钟前
JPA查询部分字段的最佳实践
java·开发语言
一写代码就开心1 小时前
DBeaver 咋手动配置sqlite 驱动
java
Marzlam1 小时前
C# IDisposable接口 与析构函数
开发语言·c#
小小药1 小时前
011-spring-整合三方框架的命名空间原理(重要)
java·数据库·spring
forestsea1 小时前
【深度学习】Java DL4J基于 CNN 构建车辆识别与跟踪模型
java·人工智能·深度学习·cnn·deep learning
峰子20121 小时前
Go语言实现守护进程的挑战
开发语言·后端·面试·架构·golang·go
m0_748237151 小时前
PHP实现登录和注册(附源码)
开发语言·php