Eu tenho uma matriz de números inteiros em Java, gostaria de usar apenas uma parte dele. Eu sei que em Python você pode fazer algo como esse array [index:] e ele retorna o array do índice. É algo como isso possível em Java.
Eu tenho uma matriz de números inteiros em Java, gostaria de usar apenas uma parte dele. Eu sei que em Python você pode fazer algo como esse array [index:] e ele retorna o array do índice. É algo como isso possível em Java.
Respostas:
O comprimento de uma matriz em Java é imutável. Portanto, você precisa copiar a parte desejada como uma nova matriz.
Use o copyOfRange
método da classe java.util.Arrays :
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndex é o índice inicial do intervalo a ser copiado, inclusive.
endIndex é o índice final do intervalo a ser copiado, exclusivo. (Esse índice pode estar fora da matriz)
Por exemplo:
//index 0 1 2 3 4
int[] arr = {10, 20, 30, 40, 50};
Arrays.copyOfRange(arr, 0, 2); // returns {10, 20}
Arrays.copyOfRange(arr, 1, 4); // returns {20, 30, 40}
Arrays.copyOfRange(arr, 2, arr.length); // returns {30, 40, 50} (length = 5)
endIndex
tamanho maior que o tamanho da matriz passado como o primeiro argumento. Portanto, se você quiser uma cópia completa, crie uma variável referente a essa matriz e use Arrays.copyOfRange(var, 0, var.length)
orArrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException
.
Sim, você pode usar Arrays.copyOfRange
Faz a mesma coisa (observe que há uma cópia: você não altera a matriz inicial).
List
e um, subList
conforme descrito na resposta do @ K-ballo.
Podes tentar:
System.arraycopy(sourceArray, 0, targetArray, 0, targetArray.length);// copies whole array
// copies elements 1 and 2 from sourceArray to targetArray
System.arraycopy(sourceArray, 1, targetArray, 0, 2);
Veja javadoc para System .
Se você estiver usando o Java 1.6 ou superior, poderá Arrays.copyOfRange
copiar uma parte da matriz. Do javadoc:
Copia o intervalo especificado da matriz especificada para uma nova matriz. O índice inicial do intervalo (de) deve estar entre zero e
original.length
, inclusive. O valor emoriginal[from]
é colocado no elemento inicial da cópia (a menos quefrom == original.length
oufrom == to
). Os valores dos elementos subseqüentes na matriz original são colocados nos elementos subseqüentes na cópia. O índice final do intervalo (to
), que deve ser maior ou igual afrom
, pode ser maior queoriginal.length
, nesse caso,false
é colocado em todos os elementos da cópia cujo índice é maior ou igual aoriginal.length - from
. O comprimento da matriz retornada seráto - from
.
Aqui está um exemplo simples :
/**
* @Program that Copies the specified range of the specified array into a new
* array.
* CopyofRange8Array.java
* Author:-RoseIndia Team
* Date:-15-May-2008
*/
import java.util.*;
public class CopyofRange8Array {
public static void main(String[] args) {
//creating a short array
Object T[]={"Rose","India","Net","Limited","Rohini"};
// //Copies the specified short array upto specified range,
Object T1[] = Arrays.copyOfRange(T, 1,5);
for (int i = 0; i < T1.length; i++)
//Displaying the Copied short array upto specified range
System.out.println(T1[i]);
}
}
Confira copyOfRange ; e exemplo:
int[] arr2 = Arrays.copyOfRange(arr,0,3);
Você pode usar algo como isto: Arrays#copyOfRange
Você pode usar o subList(int fromIndex, int toIndex)
método em seus números inteiros, algo como isto:
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Integer> arr = new ArrayList<>();
arr.add(1);
arr.add(2);
arr.add(3);
arr.add(4);
List<Integer> partialArr = arr.subList(1, 3);
// print the subArr
for (Integer i: partialArr)
System.out.println(i + " ");
}
}
Saída será: 2 3
.
Observe que o subList(int fromIndex, int toIndex)
método executa menos 1 na 2ª variável que recebe (var2 - 1), não sei exatamente por que, mas é o que acontece, talvez para reduzir a chance de exceder o tamanho da matriz.
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)
como, em vez de 255 I não pode usar Integer.MAX_VALUE, no caso de eu não quero obter o comprimento real