学习使用不同的技巧声明和初始化数组以及它们之间的区别。除了直接访问数组外,我们还将使用提供了许多有用方法的java.util.Arrays和Stream API来处理Java中的数组。

请注意,数组在内存中是连续存储的,因此在初始化时必须提到数组的长度或大小。稍后,我们可以在指定的索引位置添加数组中的元素。

此外,值得回顾的是,数组索引始终从0开始。数组的第一个元素位于索引0处。如果数组的大小为n,那么数组的最后一个元素将位于索引n-1处。

1.在声明时初始化数组

在单个语句中声明和初始化数组(使用数组初始化器)是一个好主意,前提是有如下两个条件:

  • 我们预先知道数组中的元素。
  • 数组的大小较小。
String status[] = new String[] { "Active", "Inactive", "Purged" }; 

请注意,在声明时初始化数组时,new 类型[] 是可选的。

String status[] = { "Active", "Inactive", "Purged" }; 

如果我们在声明数组后尝试初始化数组,则new类型信息是必需的,否则,我们将得到编译错误“数组常量只能在初始化程序中使用”。

//编译错误 String status[] = new String[3]; // 这一句会编译报错 //status = {"Active", "Inactive", "Purged" }; 

2. 循环初始化数组

当一次性初始化一个数组时,这种方法很有用。最简单的方法是循环遍历数组索引并将所需的元素放入指定的索引位置。

int nums[] = new int[5]; for (int i = 0; i < nums.length; i++) { nums[i] = i; } 

3.Arrays.fill() API

fill()方法采用一个值并将指定的值分配给指定数组的每个元素。在给定的示例中,我们用 1 填充所有数组元素。

int numbers[] = new int[10]; Arrays.fill(numbers, 1); //[1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 

请注意,fill() 是一个重载方法,可以获取数组必须填充到的起始索引和结束索引。在给定的示例中,我们从索引位置 2 到 9 填充数组。

int numbers[] = new int[10]; Arrays.fill(numbers, 2, 9, 1); //[0, 0, 1, 1, 1, 1, 1, 1, 1, 0] 

4.Arrays.setAll() API

设置setAll()数组的所有元素,使用提供的生成器函数来计算每个元素。

int[] squares = new int[6]; Arrays.setAll(squares, p -> p * p); //[0, 1, 4, 9, 16, 25] 

请注意,生成器函数抛出的任何异常都会转发给调用者,并且数组将处于不确定状态。

5. 使用流

Java Streams API 提供了许多内置类,可以生成流并支持对这些流进行顺序和并行聚合操作。IntStream、LongStream和DoubleStream是此类流的示例。

int[] intArray = IntStream.range(1, 11).toArray(); int[] intArray = IntStream.rangeClosed(1, 10).toArray(); int[] intArray = IntStream.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10).toArray(); 

6. Arrays.copyOf() 和 Arrays.copyOfRange()

如果我们想要一个包含现有数组项的新数组,copyOf() 方法非常有用。新数组的大小可以小于或大于现有数组。

在复制现有数组的项之后,新数组将被截断或填充为 null 以获得所需的长度。

int array[] = {0, 1, 2, 3, 4, 5}; int[] small = Arrays.copyOf(array, 3); //[0, 1, 2] int[] largeCopy = Arrays.copyOf(array, 10); //[0, 1, 2, 3, 4, 5, 0, 0, 0, 0] 

类似地,该copyOfRange()方法可用于将旧数组的项目范围复制到新数组中。

int array[] = {0, 1, 2, 3, 4, 5}; int[] smallRange = Arrays.copyOfRange(array, 1, 3); // [1, 2] int[] largeCopyRange = Arrays.copyOfRange(array, 2, 10); // [2, 3, 4, 5, 0, 0, 0, 0] 

七、结论

在这个简短的 Java 教程中,我们学习了在 Java 中声明和初始化数组的不同方法。探索 Java 数组指南中的其他主题。