Ich habe ein Array von Ganzzahlen in Java, ich möchte nur einen Teil davon verwenden. Ich weiß, dass Sie in Python so etwas wie dieses Array [index:] ausführen können, und es gibt das Array aus dem Index zurück. Ist so etwas in Java möglich.
Ich habe ein Array von Ganzzahlen in Java, ich möchte nur einen Teil davon verwenden. Ich weiß, dass Sie in Python so etwas wie dieses Array [index:] ausführen können, und es gibt das Array aus dem Index zurück. Ist so etwas in Java möglich.
Antworten:
Die Länge eines Arrays in Java ist unveränderlich. Sie müssen also das gewünschte Teil als neues Array kopieren.
Verwenden Sie die copyOfRangeMethode aus der Klasse java.util.Arrays :
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndex ist der Anfangsindex des zu kopierenden Bereichs einschließlich.
endIndex ist der endgültige Index des zu kopierenden Bereichs, exklusiv. (Dieser Index kann außerhalb des Arrays liegen.)
Z.B:
//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)
endIndexgrößer als die Größe des Arrays ist, das als erstes Argument übergeben wurde. Wenn Sie also eine vollständige Kopie wünschen, erstellen Sie eine Variable, die auf dieses Array verweist, und verwenden Sie Arrays.copyOfRange(var, 0, var.length)oderArrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException.
Ja, du kannst verwenden Arrays.copyOfRange verwenden
Es funktioniert ungefähr genauso (beachten Sie, dass es eine Kopie gibt: Sie ändern das ursprüngliche Array nicht).
Listund ein verwenden, subListwie in der Antwort von @ K-ballo beschrieben.
Du kannst es versuchen:
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);
Siehe javadoc für System .
Wenn Sie Java 1.6 oder höher verwenden, können Sie Arrays.copyOfRangeeinen Teil des Arrays kopieren. Aus dem Javadoc:
Kopiert den angegebenen Bereich des angegebenen Arrays in ein neues Array. Der Anfangsindex des Bereichs (von) muss zwischen Null und
original.lengtheinschließlich liegen. Der Wert atoriginal[from]wird in das Anfangselement der Kopie eingefügt (sofernfrom == original.lengthoder nichtfrom == to). Werte von nachfolgenden Elementen im ursprünglichen Array werden in nachfolgenden Elementen in der Kopie platziert. Der endgültige Index des Bereichs (to), der größer oder gleich sein mussfrom, kann größer sein alsoriginal.length. In diesem Fallfalsewird er in alle Elemente der Kopie eingefügt, deren Index größer oder gleich istoriginal.length - from. Die Länge des zurückgegebenen Arrays beträgtto - from.
Hier ist ein einfaches Beispiel :
/**
* @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]);
}
}
Check out copyOfRange ; und Beispiel:
int[] arr2 = Arrays.copyOfRange(arr,0,3);
Sie können so etwas verwenden: Arrays#copyOfRange
Sie können die subList(int fromIndex, int toIndex)Methode für Ihre Ganzzahlen arr verwenden, ungefähr so:
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 + " ");
}
}
Ausgabe wird sein : 2 3.
Beachten Sie, dass die subList(int fromIndex, int toIndex)Methode für die 2. empfangene Variable (var2 - 1) minus 1 ausführt. Ich weiß nicht genau warum, aber genau das passiert, um möglicherweise die Wahrscheinlichkeit zu verringern, dass die Größe des Arrays überschritten wird.
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)da ich anstelle von 255 nicht Integer.MAX_VALUE verwenden kann, falls ich nicht die tatsächliche Länge erhalten möchte