Comment créer un sous-tableau à partir d'un autre tableau? Existe-t-il une méthode qui prend les index du premier tableau tels que:
methodName(object array, int start, int end)
Je ne veux pas faire des boucles et faire souffrir mon programme.
Je continue à avoir des erreurs:
impossible de trouver la méthode de symbole copyOfRange (int [], int, int)
Ceci est mon code:
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);
}
}
Arrays.copyOfRange(..)
a été ajouté dans Java 1.6. Alors peut-être que vous n'avez pas la dernière version. S'il n'est pas possible de mettre à jour, regardez System.arraycopy(..)
Utilisez la méthode copyOfRange de la classe Java.util.Arrays:
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
Pour plus de détails:
Oui, cela s'appelle System.arraycopy (Object, int, Object, int, int) .
Cependant, il va toujours effectuer une boucle quelque part, à moins que cela ne puisse être optimisé en quelque chose comme REP STOSW
par le JIT (auquel cas la boucle est à l'intérieur du processeur).
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
Utiliser Apache ArrayUtils téléchargeable à ce lien vous pouvez facilement utiliser la méthode
subarray(boolean[] array, int startIndexInclusive, int endIndexExclusive)
"boolean" n'est qu'un exemple, il existe des méthodes pour toutes les primitives Java types
int newArrayLength = 30;
int[] newArray = new int[newArrayLength];
System.arrayCopy(oldArray, 0, newArray, 0, newArray.length);
Le code est correct, alors je suppose que vous utilisez un JDK plus ancien. Le javadoc pour cette méthode dit qu'il est là depuis 1.6. Sur la ligne de commande, tapez:
Java -version
Je devine que vous ne courez pas 1.6
JDK> = 1.8
Je suis d'accord avec toutes les réponses ci-dessus. Il y a aussi une bonne manière avec Java 8 Streams:
int[] subArr = IntStream.range(startInclusive, endExclusive)
.map(i -> src[i])
.toArray();
L'avantage à ce sujet est que cela peut être utile pour différents types de tableaux "src" et permet d'améliorer l'écriture d'opérations de pipeline sur le flux.
Pas particulier à propos de cette question, mais par exemple, si le tableau source était double
et que nous voulions prendre average()
du sous-tableau:
double avg = IntStream.range(startInclusive, endExclusive)
.mapToDouble(index -> src[index])
.average()
.getAsDouble();
Si vous utilisez Java avant la version 1.6, utilisez System.arraycopy()
à la place. Ou mettez à niveau votre environnement.