如何从另一个数组创建一个子数组?是否有一个方法从第一个数组获取索引,如:
methodName(object array, int start, int end)
Run Code Online (Sandbox Code Playgroud)
我不想过去制作循环并让我的程序受损.
我一直收到错误:
找不到符号方法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);
}
}
Run Code Online (Sandbox Code Playgroud)
Jig*_*shi 293
您可以使用
Arrays.copyOfRange(Object[] src, int from, int to)
Run Code Online (Sandbox Code Playgroud)
System.arraycopy(Object[] src, int srcStartIndex, Object[] dest, int dstStartIndex, int lengthOfCopiedIndices);
Run Code Online (Sandbox Code Playgroud)
Boz*_*zho 135
Arrays.copyOfRange(..)在Java 1.6中添加了.所以也许你没有最新版本.如果无法升级,请查看System.arraycopy(..)
Ger*_*ies 20
是的,它被称为System.arraycopy(Object,int,Object,int,int).
它仍然会在某处执行循环,除非这可以REP STOSW通过JIT(在这种情况下循环在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
Run Code Online (Sandbox Code Playgroud)
ena*_*tor 11
JDK >= 1.8
我同意上面的所有答案。Java 8 Streams 还有一个很好的方法:
int[] subArr = IntStream.range(startInclusive, endExclusive)
.map(i -> src[i])
.toArray();
Run Code Online (Sandbox Code Playgroud)
这样做的好处是,它可用于许多不同类型的“src”数组,并有助于改进流上的写入管道操作。
不是特别关注这个问题,但例如,如果源数组是double[]并且我们想要取average()子数组:
double avg = IntStream.range(startInclusive, endExclusive)
.mapToDouble(index -> src[index])
.average()
.getAsDouble();
Run Code Online (Sandbox Code Playgroud)
使用可从此链接下载的Apache ArrayUtils,可以轻松使用该方法
subarray(boolean[] array, int startIndexInclusive, int endIndexExclusive)
Run Code Online (Sandbox Code Playgroud)
“布尔值”仅是示例,对于所有基本类型的Java类型都有方法