如何在Java中从另一个数组创建子数组?

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
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);
    }
}

你可以使用

JDK>1.5

1
Arrays.copyOfRange(Object[] src, int from, int to)

贾瓦多克

JDK<1.5

1
System.arraycopy(Object[] src, int srcStartIndex, Object[] dest, int dstStartIndex, int lengthOfCopiedIndices);

贾瓦多克


在Java 1.6中添加了EDCOX1×1。所以也许你没有最新版本。如果无法升级,请查看System.arraycopy(..)


使用java.util.arrays类中的copyOfRange方法:

int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);

有关详细信息:

链接到类似问题


是的,它叫做system.arraycopy(object,int,object,int,int)。

不过,它仍然会在某个地方执行循环,除非它可以通过JIT(在这种情况下,循环在CPU中)优化成类似于REP STOSW的东西。

2


在这个链接上使用可下载的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"数组有用,并有助于改进在流上编写管道操作。

对于这个问题并不特别,但例如,如果源数组是double,并且我们想取子数组的average()

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。或者升级您的环境。