资讯动态

JavaSE初学(3)

发布时间:2026/8/7 7:43:16 来源:尧图企业网站定制
第三章 数组数组是 Java 中最基础、最常用的数据结构之一用于存储固定大小的同类型元素序列。本章将详细介绍数组的基本概念、创建、遍历、常见操作以及二维数组。一、数组基本概念1. 数组定义程序 算法 数据结构。算法解决程序问题的流程步骤。数据结构将数据按照某种特定的结构来存储。数组是最简单的数据结构之一。数组是相同数据类型元素的有序集合在内存中是一块连续的空间长度一旦创建便不可修改。数组属于引用类型基本类型数组存储值引用类型数组存储对象地址通过下标索引访问元素。2. 数组的创建数组创建主要有两种方式静态初始化在声明数组的同时直接给出数组元素的初始值。适用于数组元素已知的情况。int[] array1 {32, 5, 7, 87}; int[] array2 new int[]{32, 5, 7, 87};动态初始化在声明数组时仅指定数组的长度然后通过赋值语句逐个给数组元素赋值。适用于数组元素在声明时未知的情况。元素类型[] 数组名 new 元素类型[长度]; // 示例 int[] array1 new int[3]; double[] array2 new double[4]; // 其他数据类型同上各类型数组默认初始值byte/short/int/long0float/double0.0booleanfalsechar\u0000空字符引用类型String、对象null3. 数组的遍历Test // 数组的定义和遍历 public void testArray() { int[] array new int[4]; // new一个对象 array[0] 123; array[1] 456; array[2] 789; array[3] 101112; System.out.println(array[0]); System.out.println(array[1]); System.out.println(array[2]); System.out.println(array[3]); System.out.println(----------------------); // 正序遍历 for (int i 0; i array.length; i) { System.out.println(array[i]); } System.out.println(----------------------); // 倒序遍历 for (int i array.length - 1; i 0; i--) { System.out.println(array[i]); } System.out.println(----------------------); // 增强的for循环不需要遍历下标自动遍历数组中的元素适用于只需要元素不需要下标的情况 // 语法for(数组元素的类型 数组元素的别名 : 数组名){} for (int item : array) { System.out.println(item); } }二、数组下标越界异常访问数组时如果下标超出了数组的有效范围0 到length-1则会抛出ArrayIndexOutOfBoundsException。Test // 数组下标越界异常 public void testArray2() { int[] array new int[4]; array[0] 33; array[1] 2; array[2] 45; array[3] 19; for (int i 0; i array.length; i) { // 错误i array.length 会导致最后一次循环 i4越界 // java.lang.ArrayIndexOutOfBoundsException System.out.println(array[i]); } }三、数组累加和、最大值、最小值、冒泡排序数组最重要的操作就是遍历。只要能遍历所有元素就可以进行求和、求最值、排序等操作。1. 数组累加和Test // 求数组的和 public void testArray3() { int[] array {33, 2, 45, 19}; int sum 0; for (int i 0; i array.length; i) { sum array[i]; } System.out.println(sum sum); }2. 最大值、最小值Test // 求数组中的最大值 public void testArray4() { int[] array {33, 2, 45, 19}; int max array[0]; for (int i 1; i array.length; i) { if (array[i] max) { max array[i]; } } System.out.println(max max); } Test // 求数组中的最小值 public void testArray5() { int[] array {33, 2, 45, 19}; int min array[0]; for (int i 0; i array.length; i) { if (array[i] min) { min array[i]; } } System.out.println(min min); }调用函数求最大最小值Test public void testArray6() { int[] array {33, 2, 45, 19}; int max getMax(array); System.out.println(max max); } /** 获取数组中的最大值 param array 数组 return 最大值 */ public int getMax(int[] array) { int max array[0]; for (int i 1; i array.length; i) { if (array[i] max) { max array[i]; } } return max; } Test public void testArray7() { int[] array {33, 2, 45, 19}; int min getMin(array); System.out.println(min min); } /** 获取数组中的最小值 param array 数组 return 最小值 */ public int getMin(int[] array) { int min array[0]; for (int i 1; i array.length; i) { if (array[i] min) { min array[i]; } } return min; }3. 数组的排序冒泡排序排序过程示例int[] array {40, 17, 21, 1};目标{1, 17, 21, 40}第一轮40冒到最右边17, 40, 21, 117, 21, 40, 117, 21, 1, 40 ------- 40 冒出来第二轮21冒出来17, 21, 1, 4017, 1, 21, 40 ------- 21冒出来第三轮17冒出来1, 17, 21, 40 ------- 17冒出来Test // 冒泡排序 public void testArray8() { int[] array {33, 2, 45, 19}; sort1(array); for (int i 0; i array.length; i) { System.out.println(array[i]); } } public void sort1(int[] array) { for (int i 1; i array.length - 1; i) { // i代表第几轮 for (int j 0; j array.length - i; j) { if (array[j] array[j 1]) { int temp array[j]; array[j] array[j 1]; array[j 1] temp; } } } } Test public void testArray9() { int[] array2 {1, 233, 35, 436, 5}; sort2(array2); for (int i 0; i array2.length; i) { System.out.println(array2[i]); } } public void sort2(int[] array2) { for (int i 1; i array2.length - 1; i) { for (int j 0; j array2.length - i; j) { if (array2[j] array2[j 1]) { int temp array2[j]; array2[j] array2[j 1]; array2[j 1] temp; } } } }四、数组复制扩容注意数组最大的缺点长度固定。数组扩容就是构造一个更长的新数组把原数组数据复制到新数组中。1. System.arraycopy这是标准且高效的方法适用于复制数组的部分或全部。System.arraycopy(原数组, 原数组起始索引, 目标数组, 目标数组起始索引, 复制长度);Test // 使用System.arraycopy方法复制数组 public void test1() { String[] original {da, daa, daaa, daaaa}; String[] copy new String[original.length]; // 复制整个数组 System.arraycopy(original, 0, copy, 0, original.length); // 复制部分数组(仅复制索引1-2的元素) String[] part new String[2]; System.arraycopy(original, 1, part, 0, 2); System.out.println(完整复制 Arrays.toString(copy)); // 结果[da, daa, daaa, daaaa] System.out.println(部分复制 Arrays.toString(part)); // 结果[daa, daaa] }2. Arrays.copyOf 与 Arrays.copyOfRangeArrays.copyOf复制指定长度长度不足截断过长补默认值数组类型[] 新数组 Arrays.copyOf(原数组, 新数组长度);Arrays.copyOfRange复制指定范围从原数组起始索引到结束索引不包含结束索引数组类型[] 新数组 Arrays.copyOfRange(原数组, 起始索引, 结束索引);Test // 使用Arrays.copyOf和Arrays.copyOfRange方法复制数组 public void test2() { int[] original {10, 20, 30, 40, 50}; // 1. 复制整个数组新数组长度原数组 int[] copy1 Arrays.copyOf(original, original.length); // 2. 复制并扩容长度6多余位置补0 int[] copy2 Arrays.copyOf(original, 6); // 3. 复制指定范围索引1到4即元素20、30、40 // [1,4) 左闭右开 int[] copy3 Arrays.copyOfRange(original, 1, 4); System.out.println(完整复制 Arrays.toString(copy1)); // [10, 20, 30, 40, 50] System.out.println(扩容复制 Arrays.toString(copy2)); // [10, 20, 30, 40, 50, 0] System.out.println(范围复制 Arrays.toString(copy3)); // [20, 30, 40] }3. 手动遍历赋值通过 for 循环逐个复制数组元素适合需要自定义复制逻辑如只复制部分元素的场景。Test // 手动复制数组 public void test3() { int[] original {1, 2, 3, 4, 5}; int[] copy new int[original.length]; // 先创建等长的新数组 // 手动循环复制每个元素 for (int i 0; i original.length; i) { copy[i] original[i]; } System.out.println(原数组 Arrays.toString(original)); // [1, 2, 3, 4, 5] System.out.println(复制数组 Arrays.toString(copy)); // [1, 2, 3, 4, 5] }五、二维数组了解二维数组的创建和初始化int[][] array {{1, 2}, {2, 3}, {3, 4, 5}}; int[][] array new int[3][];Test // 二维数组 public void test4() { int[][] array new int[3][]; array[0] new int[2]; array[1] new int[2]; array[2] new int[3]; array[0][0] 23; array[0][1] 12; array[1][0] 22; array[1][1] 22; array[2][0] 21; array[2][1] 22; array[2][2] 23; for (int i 0; i array.length; i) { for (int j 0; j array[i].length; j) { System.out.println(array[i][j]); } } }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价