本文主要以Java示例演示如何从数组中创建子数组,即创建数组切片。学习如何使用Java 8的Arrays.copyOfRange()方法,以及将子数组转换为List对象。

//快速参考 String[] names = {"Alex", "Brian", "Charles", "David"}; //Subarray from index '0' (inclusive) to index '2' (exclusive) String[] partialNames = Arrays.copyOfRange(names, 0, 2); // [Alex, Brian] // Using Common Lang String[] partialNames = ArrayUtils.subarray(names, 0, 2); // [Alex, Brian] //Subarray to List List<String> namesList = Arrays.asList( Arrays.copyOfRange(names, 2, names.length) ); // [Charles, David] 

1.使用Arrays.copyOfRange()创建子数组

copyOfRange()方法用于将指定数组的指定范围复制到新数组中。它接受3个参数 – 原始数组、初始索引和要复制的最终索引。

to 索引参数可以大于索引长度。在这种情况下,不会引发ArrayIndexOutOfBoundsException异常。

/** * @param <T> the class of the objects in the array * @param original the array from which a range is to be copied * @param from the initial index of the range to be copied, inclusive * @param to the final index of the range to be copied, exclusive. */ public static <T> T[] copyOfRange(T[] original, int from, int to) { return copyOfRange(original, from, to, (Class<? extends T[]>) original.getClass()); } 

在下面的示例中,我们正在从不同长度的数组创建子数组。请注意,如果新数组的长度大于原始数组,则额外的数组位置将填充为数据类型的默认值。在给定的示例中,String类型的默认值是null,因此额外的数组位置被填充为null。

String[] names = {"Alex", "Brian", "Charles", "David"}; //从索引 '0' 开始,一直到第二个名字。 String[] partialNames = Arrays.copyOfRange(names, 0, 2); // [Alex, Brian] //从索引 '2' 复制所有名字。 String[] endNames = Arrays.copyOfRange(names, 2, names.length); // [Charles, David] //Copy last 8 names start with index '2' //没有 ArrayIndexOutOfBoundsException异常 String[] moreNames = Arrays.copyOfRange(names, 2, 10); // [Charles, David, null, null, null, null, null, null] 

2.使用Common Lang的ArrayUtils.subarray()

ArrayUtils.subarray()方法返回一个包含给定数组中从起始索引(包括)到结束索引(不包括)的元素的数组。

该方法在处理其他错误情况时要灵活得多。例如:

  • 如果给定的数组为null,则该方法返回null。
  • 如果起始索引小于零,起始索引值将更改为零。
  • 在以下情况下,该方法返回一个空数组:
    • 起始索引大于数组的长度。
    • 结束索引小于起始索引。
  • 如果结束索引大于数组的长度,则结束索引值将更改为数组的长度。

要使用ArrayUtils.subarray()方法,请添加最新版本的Apache Common Lang依赖项从Maven仓库中获取。

<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> 

以下是使用ArrayUtils.subarray()方法的示例。

String[] names = {"Alex", "Brian", "Charles", "David"}; String[] partialNames = ArrayUtils.subarray(names, 0, 2); // [Alex, Brian] 

3.将子数组转换为List

以下Java示例演示如何从子数组创建一个ArrayList。这可以分为两个步骤:

  • 从带有所需项目的数组创建子数组。
  • 将数组转换为List。
String[] names = {"Alex", "Brian", "Charles", "David"}; //Array to sublist List<String> namesList = Arrays.asList( Arrays.copyOfRange(names, 0, 2) ); // [Alex, Brian] 

以上就是如何在Java中创建子数组的全部内容,如果有任何问题,请在评论区留言。