Java tamsayılar bir dizi var, ben sadece bir kısmını kullanmak istiyorum. Python bu dizi [index:] gibi bir şey yapabilirsiniz biliyorum ve dizinden dizi döndürür. Java'da böyle bir şey mümkün mü?
Java tamsayılar bir dizi var, ben sadece bir kısmını kullanmak istiyorum. Python bu dizi [index:] gibi bir şey yapabilirsiniz biliyorum ve dizinden dizi döndürür. Java'da böyle bir şey mümkün mü?
Yanıtlar:
Java'da bir dizinin uzunluğu değişmez. Bu nedenle, istenen parçayı yeni bir dizi olarak kopyalamanız gerekir. Java.util.Arrays sınıfından yöntemi
kullanın :copyOfRange
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndex , kopyalanacak aralığın (dahil) başlangıç dizinidir.
endIndex , kopyalanacak aralığın münhasır endeksidir. (Bu dizin dizinin dışında olabilir)
Örneğin:
//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
. İlk bağımsız değişken olarak geçirilen dizinin boyutundan daha büyük bir değer sağlayamazsınız . Yani, tam bir kopya istiyorsanız, bu diziye Arrays.copyOfRange(var, 0, var.length)
Arrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException
.
Evet, Arrays.copyOfRange kullanabilirsiniz
Aynı şeyi yapar (bir kopya olduğunu unutmayın: ilk diziyi değiştirmezsiniz).
List
ve subList
a'yı kullanmanız gerekir .
Deneyebilirsin:
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);
Sistem için javadoc'a bakınız .
Java 1.6 veya üstünü kullanıyorsanız Arrays.copyOfRange
, dizinin bir bölümünü kopyalamak için kullanabilirsiniz . Javadoc'tan:
Belirtilen dizinin belirtilen aralığını yeni bir diziye kopyalar. Aralığın (başlangıç) endeksi sıfır ile
original.length
kapsayıcı arasında olmalıdır . Adresindeki değeroriginal[from]
, kopyanın ilk öğesine (from == original.length
veya değilsefrom == to
) yerleştirilir. Orijinal dizideki sonraki öğelerin değerleri, kopyadaki sonraki öğelere yerleştirilir. Dahato
büyük veya eşit olması gereken ( ) aralığının son dizini, daha büyükfrom
olabilir;original.length
bu durumdafalse
, dizini, dizini eşit veya daha büyük olan tüm öğelere yerleştiriliroriginal.length - from
. Döndürülen dizinin uzunluğu olacaktırto - from
.
İşte basit bir örnek :
/**
* @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]);
}
}
CopyOfRange kontrol edin ; ve örnek:
int[] arr2 = Arrays.copyOfRange(arr,0,3);
Bunun gibi bir şey kullanabilirsiniz: Arrays#copyOfRange
subList(int fromIndex, int toIndex)
Tamsayı dizinizde yöntemi kullanabilirsiniz , şöyle bir şey:
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 + " ");
}
}
Çıktı olacaktır: 2 3
.
Bu subList(int fromIndex, int toIndex)
yöntem eksi 1 alır (değişken2 - 1) 2 değişken üzerinde gerçekleştirir, ben tam olarak neden bilmiyorum, ama bu ne olur, belki dizi boyutunu aşma şansını azaltmak için.
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)
255 yerine Integer.MAX_VALUE kullanamıyorum, gerçek uzunluğu elde etmek istemiyorum durumunda