Java 数组详细教程
数组是Java中存储固定大小同类型元素的数据结构。下面我将详细介绍Java数组的各个方面。
一、数组基础
1. 数组声明
1 2 3 4 5 6 7 8
| int[] intArray;
String[] stringArray;
int intArray2[];
|
2. 数组初始化
1 2 3 4 5 6 7 8 9 10 11 12 13
| int[] numbers = {1, 2, 3, 4, 5};
int[] numbers2 = new int[5]; numbers2[0] = 10; numbers2[1] = 20;
double[] doubles = new double[3]; boolean[] flags = new boolean[2]; String[] names = new String[3];
|
3. 数组访问
1 2 3 4 5 6 7 8 9 10 11 12
| int[] arr = {10, 20, 30, 40, 50};
System.out.println(arr[0]); System.out.println(arr[4]);
arr[2] = 35; System.out.println(arr[2]);
System.out.println(arr.length);
|
二、数组遍历
1. 普通for循环
1 2 3 4 5
| int[] numbers = {1, 2, 3, 4, 5};
for (int i = 0; i < numbers.length; i++) { System.out.println("索引 " + i + ": " + numbers[i]); }
|
2. 增强for循环(for-each)
1 2 3
| for (int num : numbers) { System.out.println(num); }
|
3. 使用Arrays.toString()
1 2
| System.out.println(Arrays.toString(numbers));
|
三、多维数组
1. 二维数组声明和初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| int[][] matrix = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
int[][] matrix2 = new int[3][4];
int[][] irregularArray = { {1, 2}, {3, 4, 5}, {6} };
|
2. 二维数组遍历
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| for (int i = 0; i < matrix.length; i++) { for (int j = 0; j < matrix[i].length; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); }
for (int[] row : matrix) { for (int num : row) { System.out.print(num + " "); } System.out.println(); }
|
四、数组常用操作
1. 数组复制
1 2 3 4 5 6 7 8 9 10 11
| int[] source = {1, 2, 3, 4, 5};
int[] dest1 = new int[5]; System.arraycopy(source, 0, dest1, 0, source.length);
int[] dest2 = Arrays.copyOf(source, source.length);
int[] dest3 = source.clone();
|
2. 数组排序
1 2 3 4 5 6 7 8 9 10
| int[] numbers = {5, 3, 9, 1, 7};
Arrays.sort(numbers); System.out.println(Arrays.toString(numbers));
Integer[] nums = {5, 3, 9, 1, 7}; Arrays.sort(nums, Collections.reverseOrder()); System.out.println(Arrays.toString(nums));
|
3. 数组搜索
1 2 3 4 5
| int[] sortedArray = {1, 3, 5, 7, 9};
int index = Arrays.binarySearch(sortedArray, 5); System.out.println(index);
|
4. 数组比较
1 2 3 4 5 6
| int[] arr1 = {1, 2, 3}; int[] arr2 = {1, 2, 3}; int[] arr3 = {1, 2, 4};
System.out.println(Arrays.equals(arr1, arr2)); System.out.println(Arrays.equals(arr1, arr3));
|
5. 数组填充
1 2 3
| int[] arr = new int[5]; Arrays.fill(arr, 10); System.out.println(Arrays.toString(arr));
|
五、数组与集合转换
1. 数组转List
1 2 3 4 5 6 7
| String[] names = {"Alice", "Bob", "Charlie"};
List<String> nameList = Arrays.asList(names);
List<String> nameList2 = new ArrayList<>(Arrays.asList(names));
|
2. List转数组
1 2 3 4 5 6 7 8 9 10
| List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Orange");
Object[] objArray = list.toArray();
String[] strArray = list.toArray(new String[0]);
|
六、数组常见问题
1. 数组索引越界
1 2
| int[] arr = {1, 2, 3}; System.out.println(arr[3]);
|
2. 空指针异常
1 2
| int[] arr = null; System.out.println(arr.length);
|
3. 数组长度不可变
1 2
| int[] arr = new int[5]; arr.length = 10;
|
七、实用技巧
1. 数组反转
1 2 3 4 5 6 7 8 9
| int[] arr = {1, 2, 3, 4, 5};
for (int i = 0; i < arr.length / 2; i++) { int temp = arr[i]; arr[i] = arr[arr.length - 1 - i]; arr[arr.length - 1 - i] = temp; }
System.out.println(Arrays.toString(arr));
|
2. 查找最大值/最小值
1 2 3 4 5 6 7 8 9 10 11 12
| int[] numbers = {5, 3, 9, 1, 7};
int max = numbers[0]; int min = numbers[0];
for (int num : numbers) { if (num > max) max = num; if (num < min) min = num; }
System.out.println("最大值: " + max); System.out.println("最小值: " + min);
|
3. 数组去重
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| int[] arr = {1, 2, 2, 3, 4, 4, 5};
Set<Integer> set = new HashSet<>(); for (int num : arr) { set.add(num); }
int[] uniqueArr = new int[set.size()]; int index = 0; for (int num : set) { uniqueArr[index++] = num; }
System.out.println(Arrays.toString(uniqueArr));
|