Lớp java.util.Arrays cung cấp 2 phương thức tiện ích để copy một phần mảng:
1. Arrays.copyOf(original, newLength)
Copy từ đầu mảng đến độ dài newLength. Nếu newLength > original.length, phần mở rộng được điền giá trị mặc định (null/0/false).
String[] src = {"Java", "Python", "Go", "Rust", "Kotlin"};
String[] first3 = Arrays.copyOf(src, 3);
// ["Java", "Python", "Go"]
2. Arrays.copyOfRange(original, from, to)
Copy đoạn từ from (inclusive) đến to (exclusive). Linh hoạt hơn.
String[] middle = Arrays.copyOfRange(src, 1, 4);
// ["Python", "Go", "Rust"]
Ví dụ so sánh đầy đủ
import java.util.Arrays;
public class ArrayCopyDemo {
public static void main(String[] args) {
String[] techs = {"Java", "Python", "Go", "Rust", "Kotlin", "Swift", "Dart"};
System.out.println("Gốc: " + Arrays.toString(techs));
// copyOf: 4 phần tử đầu
String[] first4 = Arrays.copyOf(techs, 4);
System.out.println("copyOf(4): " + Arrays.toString(first4));
// copyOfRange: index 2 đến 5 (Go, Rust, Kotlin)
String[] range = Arrays.copyOfRange(techs, 2, 5);
System.out.println("copyOfRange(2,5): " + Arrays.toString(range));
// copyOfRange vượt giới hạn → ném ArrayIndexOutOfBoundsException
// Arrays.copyOfRange(techs, 2, 10); // Lỗi!
}
}
Kết quả
Gốc: [Java, Python, Go, Rust, Kotlin, Swift, Dart]
copyOf(4): [Java, Python, Go, Rust]
copyOfRange(2,5): [Go, Rust, Kotlin]
Lưu ý quan trọng
- Cả hai đều trả về mảng mới (shallow copy – các object element vẫn chung tham chiếu)
- Đối với mảng primitive: copy giá trị
- Đối với mảng object: copy tham chiếu
- Cần deep copy? Duyệt mảng và clone từng element