数组

1. 什么是数组?

数组(Array)是一种数据结构,用于存储多个相同类型的元素。这些元素在内存中是连续存储的,可以通过索引访问。数组的长度是固定的,在创建后不能改变。

2. 数组的声明、创建和初始化

数组的声明创建初始化是三个不同的步骤,可以在一个步骤中完成,也可以分别完成。

2.1 声明数组

声明数组时,只需指定数组的类型和名称。数组类型由元素类型加上 [] 表示。

// 声明一个整型数组
int[] numbers;
// 声明一个字符串数组
String[] names;

2.2 创建数组

创建数组时,必须使用 new 关键字并指定数组的长度。

// 创建一个长度为 5 的整型数组
numbers = new int[5];
// 创建一个长度为 3 的字符串数组
names = new String[3];

2.3 初始化数组

初始化数组时,可以为每个元素指定初始值。如果使用动态初始化方式(如上例),未赋值的元素将自动初始化为其类型的默认值(如 int 默认值为 0String 默认值为 null)。

  • 静态初始化
// 创建并初始化数组
int[] numbers = {1, 2, 3, 4, 5};
// 创建并初始化字符串数组
String[] names = {"Alice", "Bob", "Charlie"};
  • 动态初始化
int[] numbers = new int[5];
numbers[0] = 1;
numbers[1] = 2;
// 其他元素根据需要初始化

String[] names = new String[3];
names[0] = "Alice";
names[1] = "Bob";
// 其他元素根据需要初始化

3. 访问数组元素

数组元素通过索引访问,索引从 0 开始。

// 访问第一个元素
int firstNumber = numbers[0]; 
// 修改第三个元素的值
numbers[2] = 10;              

注意:数组越界异常

访问无效索引会引发 ArrayIndexOutOfBoundsException。例如,访问 numbers[5] 或负数索引都会导致异常,因为数组的有效索引范围是 0length-1

4. 数组的长度

数组的长度是固定的,可以通过 length 属性获取。

// 获取数组的长度
int length = numbers.length; 

5. 遍历数组

遍历数组是对每个元素进行操作的常见方式,有多种方式。

5.1 使用传统 for 循环

for (int i = 0; i < numbers.length; i++) {
    System.out.println(numbers[i]);
}

5.2 使用增强的 for 循环(for-each)

for (int number : numbers) { 
    System.out.println(number); 
} 

public intfindDuplicate(intfindDuplicate) { 
    System.out.println(number); 
}

5.3 使用 Arrays 类的 stream方法

import java.util.Arrays;

Arrays.stream(numbers).forEach(System.out::println);

6. 多维数组

多维数组可以看作数组的数组。常见的是二维数组,用于表示矩阵、表格等。

int[][] matrix = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
};

// 访问二维数组的元素
int element = matrix[1][2]; // 访问第二行第三列的元素,结果为 6

创建和初始化多维数组

// 创建一个 3x3 的整数矩阵
int[][] matrix = new int[3][3]; 
matrix[0][0] = 1;
matrix[0][1] = 2;
// 依此类推...

7. 数组的常用操作

Java 提供了许多方便的操作数组的方法,主要在 java.util.Arrays 类中。

7.1 数组排序

import java.util.Arrays;

int[] numbers = {5, 3, 1, 4, 2};
// 对数组进行升序排序
Arrays.sort(numbers);  
System.out.println(Arrays.toString(numbers)); // 输出 [1, 2, 3, 4, 5]

7.2 数组复制

// 完全复制
int[] copy = Arrays.copyOf(numbers, numbers.length); 
// 部分复制
int[] partialCopy = Arrays.copyOfRange(numbers, 1, 3); 

7.3 数组填充

int[] filledArray = new int[5];
// 将所有元素填充为 7
Arrays.fill(filledArray, 7); 
System.out.println(Arrays.toString(filledArray)); // 输出 [7, 7, 7, 7, 7]

7.4 数组比较

int[] array1 = {1, 2, 3};
int[] array2 = {1, 2, 3};
boolean areEqual = Arrays.equals(array1, array2); // 比较两个数组是否相等

8. 数组的优缺点

优点

  • 访问速度快:数组元素可以通过索引快速访问。
  • 内存连续:数组元素在内存中是连续存储的,访问效率高。

缺点

  • 大小固定:数组创建后大小不可变,不能动态增加或减少元素。
  • 类型固定:数组只能存储相同类型的元素,不支持不同类型的混合存储。

9. 常见问题及解决方法

9.1 数组越界异常

在访问数组元素时,如果使用了无效的索引会抛出 ArrayIndexOutOfBoundsException。确保访问的索引在 0length-1 范围内。

9.2 空指针异常

在使用对象类型数组时,如果数组中的元素尚未初始化null,访问这些元素的属性或方法会导致 NullPointerException。在使用前应确保数组元素已经被正确初始化。

10. 总结

数组是 Java 编程中的基本数据结构,适合存储和管理固定数量的同类型元素。掌握数组的基本操作和常见问题,是学习更高级数据结构和算法的基础。通过实际编程练习,可以更加熟悉和理解数组的使用方式和特性。

下载权限
查看
  • 免费下载
    评论并刷新后下载
    登录后下载
  • {{attr.name}}:
您当前的等级为
登录后免费下载登录 小黑屋反思中,不准下载! 评论后刷新页面下载评论 支付以后下载 请先登录 您今天的下载次数(次)用完了,请明天再来 支付积分以后下载立即支付 支付以后下载立即支付 您当前的用户组不允许下载升级会员
您已获得下载权限 您可以每天下载资源次,今日剩余

给TA打赏
共{{data.count}}人
人已打赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索