如何用Java中的另一个数组创建子数组?

问题描述 投票:277回答:9

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

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);
    }
}
java arrays
9个回答
297
投票

您可以使用

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


135
投票

Arrays.copyOfRange(..)是在Java 1.6中添加的。因此,也许您没有最新版本。如果无法升级,请查看System.arraycopy(..)


42
投票

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

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

更多详细信息:

Link to similar question


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

6
投票

使用Apache ArrayUtils可从this link下载,您可以轻松使用该方法


4
投票

JDK> = 1.8


3
投票
int newArrayLength = 30; 

int[] newArray = new int[newArrayLength];

System.arrayCopy(oldArray, 0, newArray, 0, newArray.length);

2
投票

代码是正确的,所以我猜您正在使用较旧的JDK。该方法的javadoc说它从1.6开始就已经存在。在命令行中输入:


1
投票

我正在使用1.6版之前的Java,请改用System.arraycopy()。或升级您的环境。

© www.soinside.com 2019 - 2024. All rights reserved.