How to create a sub array from another array in Java?
如何从另一个数组创建子数组?是否有方法从第一个数组中获取索引,例如:
1 | methodName(object array, int start, int end) |
我不想重复制造循环和使我的程序受到影响。
我不断出错:
0这是我的代码:
1 2 3 4 5 6 7 8 9 10 |
你可以使用
JDK>1.5贾瓦多克
JDK<1.51 |
贾瓦多克
在Java 1.6中添加了EDCOX1×1。所以也许你没有最新版本。如果无法升级,请查看
使用java.util.arrays类中的copyOfRange方法:
有关详细信息:
链接到类似问题
是的,它叫做system.arraycopy(object,int,object,int,int)。
不过,它仍然会在某个地方执行循环,除非它可以通过JIT(在这种情况下,循环在CPU中)优化成类似于
在这个链接上使用可下载的apache arrayutils,您可以很容易地使用这个方法
1 | subarray(boolean[] array, int startIndexInclusive, int endIndexExclusive) |
"布尔"只是一个例子,所有的原语Java类型都有方法
1 2 3 4 5 | int newArrayLength = 30; int[] newArray = new int[newArrayLength]; System.arrayCopy(oldArray, 0, newArray, 0, newArray.length); |
JDK>=1.8
我同意上述所有答案。Java 8流还有一个很好的方法:
1 2 3 | int[] subArr = IntStream.range(startInclusive, endExclusive) .map(i -> src[i]) .toArray(); |
这样做的好处是,它可以对许多不同类型的"src"数组有用,并有助于改进在流上编写管道操作。
对于这个问题并不特别,但例如,如果源数组是
1 2 3 4 | double avg = IntStream.range(startInclusive, endExclusive) .mapToDouble(index -> src[index]) .average() .getAsDouble(); |
代码是正确的,所以我猜您使用的是旧的JDK。该方法的javadoc表示,它从1.6开始就存在。在命令行中键入:
1 | java -version |
我猜你不会跑1.6
我在使用版本1.6之前使用Java,而不是使用EDCOX1 3。或者升级您的环境。