如何从另一个数组创建子数组?是否有一个方法从第一个数组获取索引,如:
methodName(object array, int start, int end)
我不想过去制作循环并让我的程序受损。
我一直收到错误:
找不到符号方法copyOfRange(int [],int,int)
这是我的代码:
import java.util.*;
public class testing
{
public static void main(String [] arg)
{
int[] src = new int[] {1, 2, 3, 4, 5};
int b1[] = Arrays.copyOfRange(src, 0, 2);
}
}
答案 0 :(得分:277)
您可以使用
Arrays.copyOfRange(Object[] src, int from, int to)
System.arraycopy(Object[] src, int srcStartIndex, Object[] dest, int dstStartIndex, int lengthOfCopiedIndices);
答案 1 :(得分:134)
Arrays.copyOfRange(..)
。所以也许你没有最新版本。如果无法升级,请查看System.arraycopy(..)
答案 2 :(得分:38)
使用java.util.Arrays类中的copyOfRange方法:
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
更多详情:
答案 3 :(得分:20)
是的,它被称为System.arraycopy(Object, int, Object, int, int)。
它仍然会在某处执行循环,除非这可以通过JIT优化为REP STOSW
(在这种情况下循环在CPU内)。
int[] src = new int[] {1, 2, 3, 4, 5};
int[] dst = new int[3];
System.arraycopy(src, 1, dst, 0, 3); // Copies 2, 3, 4 into dst
答案 4 :(得分:5)
使用ArrayUtils下载的this link可以轻松使用方法
subarray(boolean[] array, int startIndexInclusive, int endIndexExclusive)
"布尔"只是一个例子,有所有原语java类型的方法
答案 5 :(得分:3)
int newArrayLength = 30;
int[] newArray = new int[newArrayLength];
System.arrayCopy(oldArray, 0, newArray, 0, newArray.length);
答案 6 :(得分:2)
代码是正确的,所以我猜你使用的是较旧的JDK。该方法的javadoc说它从1.6开始就存在。在命令行输入:
java -version
我猜你没有运行1.6
答案 7 :(得分:2)
JDK> = 1.8
我同意以上所有答案。 Java 8 Streams还有一种不错的方法:
int[] subArr = IntStream.range(startInclusive, endExclusive)
.map(i -> src[i])
.toArray();
这样做的好处是,它可用于许多不同类型的“ src”数组,并有助于改善在流上的写入管道操作。
对这个问题并不特别,但是例如,如果源数组是double
,而我们想获取average()
子数组:
double avg = IntStream.range(startInclusive, endExclusive)
.mapToDouble(index -> src[index])
.average()
.getAsDouble();
答案 8 :(得分:1)
我在版本1.6之前使用的是java,而是使用System.arraycopy()
。或升级您的环境。