ฉันมีจำนวนเต็มจำนวนเต็มใน Java ฉันต้องการใช้เพียงบางส่วนเท่านั้น ฉันรู้ใน Python คุณสามารถทำอะไรเช่น array [index:] และมันคืนค่า array จาก index สิ่งนี้เป็นไปได้ใน Java
ฉันมีจำนวนเต็มจำนวนเต็มใน Java ฉันต้องการใช้เพียงบางส่วนเท่านั้น ฉันรู้ใน Python คุณสามารถทำอะไรเช่น array [index:] และมันคืนค่า array จาก index สิ่งนี้เป็นไปได้ใน Java
คำตอบ:
ความยาวของอาร์เรย์ใน Java นั้นไม่เปลี่ยนรูป ดังนั้นคุณต้องคัดลอกส่วนที่ต้องการเป็นอาร์เรย์ใหม่
ใช้copyOfRange
วิธีการจากคลาสjava.util.Arrays :
int[] newArray = Arrays.copyOfRange(oldArray, startIndex, endIndex);
startIndexเป็นดัชนีเริ่มต้นของช่วงที่จะคัดลอกรวม
endIndexเป็นดัชนีสุดท้ายของช่วงที่จะคัดลอกแบบเอกสิทธิ์ (ดัชนีนี้อาจอยู่นอกอาร์เรย์)
เช่น:
//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
ขนาดที่ใหญ่กว่าของอาเรย์ที่ถูกส่งเป็นอาร์กิวเมนต์แรก ดังนั้นหากคุณต้องการสำเนาเต็มให้สร้างตัวแปรที่อ้างถึงอาร์เรย์นี้และใช้Arrays.copyOfRange(var, 0, var.length)
หรือArrays.copyOf(var, var.length)
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,Short.MAX_VALUE)
ArrayIndexOutOfBoundsException
ด้วย
คุณสามารถล้อมอาร์เรย์เป็นรายการและขอรายการย่อยของมัน
MyClass[] array = ...;
List<MyClass> subArray = Arrays.asList(array).subList(index, array.length);
ใช่คุณสามารถใช้Arrays.copyOfRange
มันทำในสิ่งเดียวกัน (หมายเหตุมีสำเนา: คุณไม่เปลี่ยนอาร์เรย์เริ่มต้น)
List
และ a subList
ตามที่ระบุไว้ในคำตอบของ @ K-ballo
คุณสามารถลอง:
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);
ดูJavadoc ระบบ
หากคุณใช้ Java 1.6 หรือสูงกว่าคุณสามารถใช้Arrays.copyOfRange
เพื่อคัดลอกส่วนของอาร์เรย์ จาก javadoc:
คัดลอกช่วงที่ระบุของอาร์เรย์ที่ระบุลงในอาร์เรย์ใหม่ ดัชนีเริ่มต้นของช่วง (จาก) จะต้องอยู่ระหว่างศูนย์ถึงและ
original.length
รวม ค่าที่original[from]
ถูกวางไว้ในองค์ประกอบเริ่มต้นของการคัดลอก (เว้นแต่from == original.length
หรือfrom == to
) ค่าจากองค์ประกอบที่ตามมาในอาร์เรย์เดิมจะถูกวางไว้ในองค์ประกอบที่ตามมาในการคัดลอก ดัชนีสุดท้ายของช่วง (to
) ซึ่งต้องมีค่ามากกว่าหรือเท่ากับfrom
อาจจะมากกว่าoriginal.length
ซึ่งในกรณีนี้จะถูกวางในทุกองค์ประกอบของการคัดลอกซึ่งดัชนีมีค่ามากกว่าหรือเท่ากับfalse
ความยาวของอาร์เรย์กลับจะเป็นoriginal.length - from
to - from
นี่คือตัวอย่างง่ายๆ :
/**
* @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 ; และตัวอย่าง:
int[] arr2 = Arrays.copyOfRange(arr,0,3);
คุณสามารถใช้สิ่งนี้: Arrays#copyOfRange
คุณสามารถใช้subList(int fromIndex, int toIndex)
วิธีการในจำนวนเต็ม arr ของคุณเช่นนี้:
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 + " ");
}
}
ผลลัพธ์จะเป็น: 2 3
.
โปรดทราบว่าsubList(int fromIndex, int toIndex)
วิธีการทำงานลบ 1 ในตัวแปรที่ 2 ที่ได้รับ (var2 - 1) ฉันไม่ทราบว่าทำไม แต่นั่นคือสิ่งที่เกิดขึ้นอาจจะลดโอกาสของการเกินขนาดของอาร์เรย์
Arrays.copyOfRange(Thread.currentThread().getStackTrace(),1,255)
แทน 255 ฉันไม่สามารถใช้ Integer.MAX_VALUE ได้ในกรณีที่ฉันไม่ต้องการรับความยาวจริง