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

时间:2010-12-14 13:20:51

标签: java arrays

如何从另一个数组创建子数组?是否有一个方法从第一个数组获取索引,如:

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

9 个答案:

答案 0 :(得分:277)

您可以使用

JDK> 1.5

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

Javadoc

JDK <= 1.5

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

Javadoc

答案 1 :(得分:134)

Java 1.6中添加了

Arrays.copyOfRange(..)。所以也许你没有最新版本。如果无法升级,请查看System.arraycopy(..)

答案 2 :(得分:38)

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

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

更多详情:

Link to similar question

答案 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) 

&#34;布尔&#34;只是一个例子,有所有原语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()。或升级您的环境。