文
章
目
录
章
目
录
本文主要以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中创建子数组的全部内容,如果有任何问题,请在评论区留言。