1、Java 数组
数组用于将多个值存储在单个变量中,而不是为每个值声明单独的变量。
要声明数组,要使用方括号定义变量类型:
String[] langs;
下面声明了一个包含字符串数组的变量。要向其中插入值,我们可以使用数组字面量,就是将值放在以逗号分隔的花括号内,例如:
String[] langs = {"c", "java", "python", "cjavapy"};
要创建整数数组,可以编写:
int[] myNum = {10, 20, 30, 40};
2、访问数组中元素
可以通过数组索引来访问数组元素,索引从 0
开始。
该语句访问langs
中第一个元素的值:
例如:
String[] langs = {"c", "java", "python", "cjavapy"}; System.out.println(langs[0]); // 输出 c
注意:数组索引以0
开头:[0]
是第一个元素。 [1]
是第二个元素,依此类推。
3、修改数组中元素
要更改指定元素的值,可以使用数组索引来修改,例如:
例如:
langs[0] = "javascript";
例如:
String[] langs = {"c", "java", "python", "cjavapy"}; langs[0] = "javascript"; System.out.println(langs[0]);
4、数组长度
在Java中,数组是非原始数据类型,也就是它是具有不同方法的对象,可用于获取有关此对象的信息。每个数组都有一个 length
属性,它返回数组的大小。例如,要找出一个数组有多少个元素,可以使用length
属性:
例如:
String[] langs = {"c", "java", "python", "cjavapy"}; System.out.println(langs.length); // 输出 4
5、循环遍历数组
可以使用for
循环遍历数组元素,并通过使用length
属性来指定循环应运行的次数。
下面示例输出langs
数组中的所有元素:
例如:
String[] langs = {"c", "java", "python", "cjavapy"}; for (int i = 0; i < langs.length; i++) { System.out.println(langs[i]); }
6、for-each遍历数组
专用于循环遍历数组中的元素:
语法
for (type variable : arrayname) { ... }
以下示例使用for-each循环输出langs
数组中的所有元素:
例如:
String[] langs = {"c", "java", "python", "cjavapy"}; for (String i : langs) { System.out.println(i); }
for循环和for-each循环,for-each方法更简单方便,而且不需要计数(使用length属性),并且更具可读性。
7、多维数组
多维数组是包含一个或多个数组的数组。
如果需要创建二维数组,需要将每个数组添加到其各自的大括号内:
例如:
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} };
myNumbers
现在是一个以两个数组为元素的数组。
要访问myNumbers
数组的元素,请指定两个索引:一个用于数组,一个用于该数组内的元素。本示例访问myNumbers
的第二个数组(索引下标为1)中的第三个元素(索引下标为2):
例如:
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} }; int x = myNumbers[1][2]; System.out.println(x); // 输出 7
也可以在通过嵌套for
循环来获取二维数组的元素(需要指向两个索引下标):
例如:
int[][] myNumbers = { {1, 2, 3, 4}, {5, 6, 7} }; for (int i = 0; i < myNumbers.length; ++i) { for(int j = 0; j < myNumbers[i].length; ++j) { System.out.println(myNumbers[i][j]); } }
8、Arrays 类
java.util.Arrays
类能方便地操作数组,它提供的所有方法都是静态的。
具有以下常用功能:
- 给数组赋值:通过
fill
方法。 - 对数组排序:通过
sort
方法,按升序。 - 比较数组:通过
equals
方法比较数组中元素值是否相等。 - 查找数组元素:通过
binarySearch
方法能对排序好的数组进行二分查找法操作。
具体说明请查看下表:
序号 | 方法和说明 |
1 | public static int binarySearch(Object[] a, Object key) 用二分查找算法在给定数组中搜索给定值的对象( 数组在调用前必须排序好的。如果查找值包含在数组中, 则返回搜索键的索引; 否则返回 (-(插入点) - 1)。 |
2 | public static boolean equals(long[] a, long[] a2) 如果两个指定的 long 型数组彼此相等 ,则返回 true。如果两个数组包含相同数量的元素, 并且两个数组中的所有相应元素对都是相等的, 则认为这两个数组是相等的。换句话说, 如果两个数组以相同顺序包含相同的元素, 则两个数组是相等的。 同样的方法适用于 所有的其他基本数据类型( |
3 | public static void fill(int[] a, int val) 将指定的 同样的方法适用于 所有的其他基本数据类型( |
4 | public static void sort(Object[] a) 对指定对象数组根据其元素的自然顺序进行升序排列。 同样的方法适用于 所有的其他基本数据类型( |
1)排序 (sort
)
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] numbers = {5, 3, 8, 1, 4}; Arrays.sort(numbers); // 对数组进行排序 // 输出:[1, 3, 4, 5, 8] System.out.println(Arrays.toString(numbers)); } }
2)二分查找 (binarySearch
)
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] numbers = {1, 3, 4, 5, 8}; // 查找元素 4 的索引位置 int index = Arrays.binarySearch(numbers, 4); System.out.println(index); // 输出:2 } }
3)数组填充 (fill
)
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] numbers = new int[5]; // 将数组中的所有元素填充为 10 Arrays.fill(numbers, 10); // 输出:[10, 10, 10, 10, 10] System.out.println(Arrays.toString(numbers)); } }
4)数组比较 (equals
)
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] arr1 = {1, 2, 3}; int[] arr2 = {1, 2, 3}; // 比较两个数组是否相等 boolean areEqual = Arrays.equals(arr1, arr2); System.out.println(areEqual); // 输出:true } }