วิธีที่ 1: ใช้ Arrays.copyOf()
เมธอด Arrays.copyOf(originalArray, newLength) คัดลอกจากต้นทางตั้งแต่ index 0 ถึง newLength-1
ตัวอย่าง
import java.util.Arrays;
public class CopyingSectionOfArray {
public static void main(String[] args) {
String[] str = new String[10];
str[0] = "Java"; str[1] = "WebGL"; str[2] = "OpenCV";
str[3] = "OpenNLP"; str[4] = "JOGL"; str[5] = "Hadoop";
str[6] = "HBase"; str[7] = "Flume"; str[8] = "Mahout"; str[9] = "Impala";
System.out.println("Original: " + Arrays.toString(str));
String[] newArray = Arrays.copyOf(str, 5); // คัดลอก 5 ตัวแรก
System.out.println("Copied: " + Arrays.toString(newArray));
}
}
ผลลัพธ์
Original: [Java, WebGL, OpenCV, OpenNLP, JOGL, Hadoop, HBase, Flume, Mahout, Impala]
Copied: [Java, WebGL, OpenCV, OpenNLP, JOGL]
วิธีที่ 2: ใช้ Arrays.copyOfRange() (แนะนำสำหรับคัดลอกช่วงกลาง)
เมธอด Arrays.copyOfRange(originalArray, fromIndex, toIndex) คัดลอกจาก fromIndex (รวม) ถึง toIndex (ไม่รวม)
ตัวอย่าง
import java.util.Arrays;
public class CopyingSectionOfArray {
public static void main(String[] args) {
String[] str = new String[10];
str[0] = "Java"; str[1] = "WebGL"; str[2] = "OpenCV";
str[3] = "OpenNLP"; str[4] = "JOGL"; str[5] = "Hadoop";
str[6] = "HBase"; str[7] = "Flume"; str[8] = "Mahout"; str[9] = "Impala";
System.out.println("Original: " + Arrays.toString(str));
String[] newArray = Arrays.copyOfRange(str, 2, 7); // index 2-6
System.out.println("Copied: " + Arrays.toString(newArray));
}
}
ผลลัพธ์
Original: [Java, WebGL, OpenCV, OpenNLP, JOGL, Hadoop, HBase, Flume, Mahout, Impala]
Copied: [OpenCV, OpenNLP, JOGL, Hadoop, HBase]
การเปรียบเทียบ
| เมธอด | ใช้สำหรับ | พารามิเตอร์ |
|---|---|---|
| copyOf() | คัดลอกจากต้นทาง (prefix) | (array, newLength) |
| copyOfRange() | คัดลอกช่วงที่กำหนด | (array, from, to) |
หมายเหตุเพิ่มเติม
- ทั้งสองเมธอดคืนค่า อาร์เรย์ใหม่ (shallow copy สำหรับออบเจ็กต์)
- รองรับ primitive arrays (int[], double[], ฯลฯ) และ object arrays
- หาก fromIndex < 0 หรือ toIndex > array.length จะโยน
ArrayIndexOutOfBoundsException - Java 8+ สามารถใช้ Stream API:
Arrays.stream(arr, from, to).toArray()