Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

4 Cách Sao Chép Mảng Trong Java

Khi làm việc với mảng trong Java, bạn có thể quyết định tạo bản sao mảng. Ví dụ, nếu điều hành quán cà phê muốn tạo menu theo mùa, bạn có thể muốn tạo bản sao menu gốc làm cơ sở menu mới.

Trong Java, có nhiều cách sao chép mảng. Hướng dẫn này khám phá bốn phương pháp phổ biến sao chép mảng và thảo luận cách hoạt động từng dòng. Sau đọc hướng dẫn này, bạn sẽ thành thạo sao chép mảng trong Java.

Mảng Java

Trong Java, mảng là container chứa giá trị giữ một kiểu đơn lẻ. Ví dụ, mảng dùng lưu danh sách sách, hoặc danh sách điểm người chơi đạt chơi đâm thước (darts).

Mảng hữu ích khi muốn làm việc nhiều giá trị tương tự vì có thể lưu tất cả trong một tập hợp. Cho phép rút gọn mã và chạy cùng phương thức trên giá trị tương tự cùng lúc.

Giả sử muốn tạo mảng lưu cà phê bán tại quán. Có thể làm bằng mã:

String[] coffees = {“Espresso”, “Mocha”, “Latte”, “Cappuccino”, “Pour Over”, “Flat White”};

Trong ví dụ, khai báo mảng coffees lưu giá trị String. Mảng chứa sáu giá trị.

Mỗi mục mảng gán số chỉ số (index), bắt đầu từ 0, dùng tham chiếu mục riêng lẻ trong mảng.

Bây giờ đã khám phá cơ bản mảng Java, có thể thảo luận phương pháp sao chép nội dung mảng.

Sao Chép Mảng Dùng Toán Tử Gán

Một trong những phương pháp clone phổ biến nhất sao chép mảng là dùng toán tử gán (assignment operator).

Toán tử gán dùng gán giá trị cho mảng. Bằng cách dùng toán tử gán, có thể gán nội dung mảng hiện có cho biến mới, tạo bản sao mảng hiện có.

Quay lại quán cà phê. Giả sử muốn tạo bản sao mảng coffees làm cơ sở menu cà phê mùa hè. Có thể dùng mã sau tạo bản sao mảng:

class CopyAssignment { public static void main(String[] args) { String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"}; String[] summer_coffees = coffees; for (String c: summer_coffees) { System.out.print(c + ","); } } } 

Mã trả về:

Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White,

Phân tích mã: Dòng đầu trong lớp CopyAssignment, khai báo mảng coffees lưu menu cà phê tiêu chuẩn.

Dòng tiếp theo, dùng toán tử gán gán giá trị coffees cho mảng mới summer_coffees. Sau đó tạo vòng lặp “for-each” lặp qua mỗi mục mảng summer_coffees in ra bảng điều khiển.

Có một nhược điểm phương pháp này: nếu thay đổi phần tử một mảng, mảng kia cũng thay đổi. Vì vậy nếu đổi giá trị Latte thành Summer Latte trong danh sách summer_coffees, danh sách coffees cũng thay đổi.

Vòng Lặp Sao Chép Mảng

Cách đầu thảo luận sao chép mảng - dùng toán tử gán - tạo gọi là shallow copy (bản sao nông). Trươn hợp vì gán đối tượng mảng hiện có cho đối tượng mới, nghĩa là khi thay đổi bất kỳ đối tượng nào, cả hai thay đổi - hai đối tượng liên kết.

Tuy nhiên, thường cần tạo deep copy (bản sao sâu). Bản sao sâu sao chép giá trị từ đối tượng hiện có và tạo đối tượng mảng mới. Khi tạo bản sao sâu, có thể thay đổi mảng mới không ảnh hưởng gốc.

Một cách tạo bản sao sâu là tạo vòng lặp for lặp qua nội dung mảng tạo mảng mới.

Giả sử muốn tạo bản sao sâu mảng coffees tên summer_coffees. Cần bản sao sâu vì định thay đổi nội dung summer_coffees phản ánh cà phê mới mùa hè.

Mã tạo bản sao sâu dùng vòng lặp for:

import java.util.Arrays; class LoopCopy { public static void main(String[] args) { String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"}; String[] summer_coffees = new String[6]; for (int i = 0; i < coffees.length; ++i) { summer_coffees[i] = coffees[i]; } System.out.println(Arrays.toString(summer_coffees)); } } 

Khi chạy mã, đầu ra:

[Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

Như bạn thấy, mã tạo bản sao mảng gốc. Giải thích cách hoạt động từng bước:

  1. Nhập java.util.Arrays bao gồm phương thức toString() dùng in mảng ra bảng điều khiển cuối ví dụ.
  2. Khai báo mảng coffees lưu danh sách cà phê menu tiêu chuẩn.
  3. Khởi tạo mảng summer_coffees lưu sáu giá trị.
  4. Dùng vòng lặp for lặp qua mỗi mục danh sách coffees.
  5. Mỗi lần for chạy, mục chỉ số i trong summer_coffees gán mục chỉ số i trong coffees.
  6. Dùng Arrays.toString() chuyển summer_coffees thành chuỗi, in mảng mới với phần tử sao chép ra bảng điều khiển.

Dùng Phương Thức copyOfRange() Java

Phương thức Java copyOfRange() dùng sao chép mảng. Arrays.copyOfRange() là phần lớp java.util.Arrays. Cú pháp phương thức copyOfRange():

import java.util.arrays; DataType[] newArray = Arrays.copyOfRange(oldArray, indexPos, length); 

Phân tích cú pháp copyOfRange():

  1. DataType là kiểu dữ liệu mảng mới lưu.
  2. newArray là tên mảng mới.
  3. oldArray là mảng giá trị muốn sao chép sang newArray.
  4. indexPos là vị trí bắt đầu sao chép trong oldArray.
  5. length là số giá trị sao chép từ oldArray sang newArray.

Hãy đi qua ví dụ minh họa copyOfRange() thực tế. Giả sử muốn tạo bản sao mảng coffees trước. Có thể làm bằng mã:

import java.util.Arrays; class CopyUsingRange { public static void main(String[] args) { String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"}; String[] summer_coffees = Arrays.copyOfRange(coffees, 0, coffees.length); System.out.println("Summer coffees: " + Arrays.toString(summer_coffees)); } } 

Mã trả về:

Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

Phân tích mã:

  1. Nhập thư viện java.util.Arrays chứa copyOfRange() và toString() dùng ví dụ.
  2. Khai báo mảng coffees lưu cà phê menu tiêu chuẩn.
  3. Khai báo mảng summer_coffees dùng copyOfRange() tạo bản sao mảng coffees. Tham số chỉ định:
    1. coffees tên mảng muốn sao chép.
    2. chỉ định sao chép từ vị trí chỉ số 0 mảng coffees.
    3. coffees.length chỉ định sao chép mọi giá trị danh sách.
  4. In “Summer coffees: “ theo sau mảng kết quả summer_coffees ra bảng điều khiển.

Bây giờ đã tạo bản sao danh sách coffees tên summer_coffees.

Dùng Phương Thức arraycopy() Java

Phương thức arraycopy() dùng sao chép dữ liệu từ mảng này sang mảng khác. arraycopy() là phần lớp System bao gồm nhiều tùy chọn tùy chỉnh bản sao mảng hiện có.

Cú pháp phương thức arraycopy():

System.arraycopy(sourceArray, startingPos, newArray, newArrayStartingPos, length);

Phân tích phương pháp. copyarray() chấp nhận năm tham số:

  • sourceArray là tên mảng muốn sao chép.
  • startingPos là vị trí chỉ số bắt đầu sao chép giá trị trong source_array.
  • newArray là tên mảng mới nơi giá trị sao chép.
  • newArrayStartingPos là vị trí chỉ số bắt đầu thêm giá trị sao chép.
  • length là số phần tử mảng muốn sao chép sang new_array.

Quay lại quán cà phê. Giả sử muốn sao chép mọi giá trị mảng coffees sang mảng mới summer_coffees. Có thể làm bằng mã:

import java.util.Arrays; class ArrayCopyMethod { public static void main(String[] args) { String[] coffees = {"Espresso", "Mocha", "Latte", "Cappuccino", "Pour Over", "Flat White"}; String[] summer_coffees = new String[6]; System.arraycopy(coffees, 0, summer_coffees, 0, coffees.length); System.out.println("Summer coffees: " + Arrays.toString(summer_coffees)); } } 

Mã trả về:

Summer coffees: [Espresso, Mocha, Latte, Cappuccino, Pour Over, Flat White]

Phân tích mã từng bước:

  1. Nhập gói java.util.Arrays đầu chương trình. Bao gồm toString() dùng in bản sao mảng tạo cuối chương trình.
  2. Khai báo mảng coffees lưu cà phê menu tiêu chuẩn.
  3. Khởi tạo mảng summer_coffees chứa 6 giá trị.
  4. Dùng arraycopy() tạo bản sao mảng coffees. Tham số chỉ định:
    1. coffees mảng muốn sao chép.
    2. vị trí bắt đầu sao chép trong mảng coffees.
    3. summer_coffees mảng nơi giá trị sao chép thêm vào.
    4. vị trí bắt đầu thêm giá trị sao chép trong mảng summer_coffees.
    5. coffees.length số phần tử mảng muốn sao chép. Dùng coffees.length cho phép sao chép mọi phần tử từ danh sách coffees.
  5. In thông báo “Summer coffees: “, theo sau danh sách cà phê hè tạo.

Kết Luận

Sao chép mảng là thao tác phổ biến khi làm việc với danh sách. Hướng dẫn này khám phá bốn cách sao chép mảng trong Java.

Đầu tiên thảo luận tạo bản sao nông (shallow copy) dùng toán tử gán, sau giải thích tạo bản sao sâu (deep copy) dùng vòng lặp for. Sau khám phá cách dùng phương thức copyOfRange() tạo bản sao mảng, và phương thức hệ thống arraycopy() sao chép mảng.

Bây giờ bạn sẵn sàng bắt đầu sao chép mảng trong Java như chuyên nghiệp!