Computer >> Máy Tính >  >> Lập trình >> Java

4 cách sao chép một mảng trong Java

Khi bạn đang làm việc với mảng trong Java, bạn có thể quyết định rằng bạn muốn tạo bản sao của một mảng. Ví dụ:nếu bạn đang điều hành một cửa hàng cà phê và muốn tạo thực đơn theo mùa, bạn có thể muốn tạo một bản sao của thực đơn gốc của mình để dựa trên thực đơn mới.

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

Mảng Java

Trong Java, một mảng là một vùng chứa chứa các giá trị chứa một kiểu duy nhất. Ví dụ:một mảng có thể được sử dụng để lưu trữ danh sách sách hoặc danh sách điểm số mà người chơi đã kiếm được trong trò chơi phi tiêu.

Mảng hữu ích khi bạn muốn làm việc với nhiều giá trị giống nhau vì bạn có thể lưu trữ tất cả chúng trong một bộ sưu tập. Điều này cho phép bạn cô đọng mã của mình và cũng chạy các phương pháp tương tự trên các giá trị tương tự cùng một lúc.

Giả sử chúng ta muốn tạo một mảng lưu trữ cà phê được bán tại tiệm cà phê của chúng ta. Chúng tôi có thể làm như vậy bằng cách sử dụng mã này:

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

Trong ví dụ này, chúng tôi khai báo một mảng có tên là coffees nơi lưu trữ các giá trị Chuỗi. Mảng của chúng tôi chứa sáu giá trị.

Mỗi mục trong một mảng được gán một số chỉ mục, bắt đầu từ 0, có thể được sử dụng để tham chiếu các mục riêng lẻ trong một mảng.

81% người tham gia cho biết họ cảm thấy tự tin hơn về triển vọng công việc công nghệ của mình sau khi tham gia chương trình đào tạo. Kết hợp với bootcamp ngay hôm nay.

Sinh viên tốt nghiệp bootcamp trung bình dành ít hơn sáu tháng để chuyển đổi nghề nghiệp, từ khi bắt đầu bootcamp đến khi tìm được công việc đầu tiên của họ.

Bây giờ chúng ta đã khám phá những kiến ​​thức cơ bản về mảng Java, chúng ta có thể thảo luận về các phương pháp bạn có thể sử dụng để sao chép nội dung của mảng của mình.

Sao chép mảng bằng toán tử gán

Một trong những phương pháp sao chép phổ biến nhất được sử dụng để sao chép một mảng là sử dụng toán tử gán.

Toán tử gán được sử dụng để gán giá trị cho một mảng. Bằng cách sử dụng toán tử gán, chúng ta có thể gán nội dung của một mảng hiện có cho một biến mới, biến này sẽ tạo ra một bản sao của mảng hiện có của chúng ta.

Hãy quay lại quán cà phê. Giả sử chúng ta muốn tạo một bản sao của coffees mảng mà chúng tôi sẽ dựa trên thực đơn cà phê mùa hè của chúng tôi. Chúng tôi có thể sử dụng mã này để tạo một bản sao của 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ã của chúng tôi trả về:

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

Hãy chia nhỏ mã của chúng ta. Trên dòng mã đầu tiên bên trong lớp CopyAssignment, chúng ta khai báo một mảng có tên là coffees nơi lưu trữ menu cà phê tiêu chuẩn của chúng tôi.

Trên dòng tiếp theo, chúng tôi sử dụng toán tử gán để gán giá trị của coffees vào một mảng mới có tên summer_coffees . Sau đó, chúng tôi tạo một vòng lặp "cho từng" lặp lại qua mọi mục trong summer_coffees mảng và in nó ra bảng điều khiển.

Có một nhược điểm khi sử dụng phương pháp này:nếu bạn thay đổi các phần tử của một mảng, mảng khác cũng sẽ bị thay đổi. Vì vậy, nếu chúng tôi đã thay đổi giá trị của Latte đến Summer Latte trong summer_coffees của chúng tôi danh sách, coffees danh sách cũng sẽ được thay đổi.

Vòng lặp để Sao chép Mảng

Cách tiếp cận đầu tiên chúng ta đã thảo luận để sao chép một mảng - sử dụng toán tử gán - tạo ra cái được gọi là shallow copy. Trường hợp này xảy ra bởi vì chúng ta đã gán một đối tượng mảng hiện có cho một đối tượng mới, có nghĩa là khi chúng ta thay đổi bất kỳ đối tượng nào, cả hai đối tượng đó sẽ bị thay đổi - hai đối tượng được liên kết với nhau.

Tuy nhiên, chúng ta thường cần tạo một bản sao sâu. Bản sao sâu sao chép các giá trị từ một đối tượng hiện có và tạo một đối tượng mảng mới. Khi bạn tạo một bản sao sâu, bạn có thể thay đổi mảng mới của mình mà không ảnh hưởng đến mảng ban đầu.

Một phương pháp có thể được sử dụng để tạo bản sao sâu là tạo for vòng lặp lặp qua nội dung của một mảng và tạo một mảng mới.

Giả sử chúng ta muốn tạo một bản sao sâu của coffees của mình mảng có tên summer_coffees. Đây cần phải là một bản sao sâu vì chúng tôi có kế hoạch thay đổi nội dung của summer_coffees để phản ánh các loại cà phê mới mà chúng tôi sẽ cung cấp trong những tháng mùa hè.

Đây là mã chúng tôi sẽ sử dụng để tạo bản sao sâu bằng cách sử dụng for vòng:

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úng tôi chạy mã của mình, kết quả như sau:

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

Như bạn có thể thấy, mã của chúng tôi đã tạo ra một bản sao của mảng ban đầu của chúng tôi. Hãy giải thích cách hoạt động của nó từng bước:

  1. Chúng tôi nhập java.util.Arrays bao gồm phương thức toString (), chúng tôi sẽ sử dụng để in mảng của mình ra bảng điều khiển ở cuối ví dụ.
  1. Chúng tôi khai báo một mảng có tên là coffees nơi lưu trữ danh sách các loại cà phê trong thực đơn tiêu chuẩn của chúng tôi.
  2. Chúng tôi khởi tạo một mảng có tên là summer_coffees sẽ lưu trữ sáu giá trị.
  3. Chúng tôi sử dụng vòng lặp for để lặp lại mọi mục trong coffees danh sách.
  4. Mỗi khi vòng lặp for chạy, mục ở giá trị chỉ mục i vào summer_coffees sẽ được chỉ định mục ở giá trị chỉ mục i trong cà phê.
  5. Chúng tôi sử dụng Arrays.toString () để chuyển đổi summer_coffees thành một chuỗi, sau đó in ra mảng mới với các phần tử đã sao chép của chúng tôi vào bảng điều khiển.

Sử dụng phương thức Java copyOfRange ()

Phương thức Java copyOfRange () được sử dụng để sao chép Arrays.copyOfRange () là một phần của lớp java.util.Arrays. Đây là cú pháp cho phương thức copyOfRange ():

import java.util.arrays;

DataType[] newArray = Arrays.copyOfRange(oldArray, indexPos, length);

Hãy phân tích cú pháp cho phương thức copyOfRange ():

  1. DataType là loại dữ liệu mà mảng mới sẽ lưu trữ.
  2. newArray là tên của mảng mới.
  3. oldArray là mảng có các giá trị bạn muốn sao chép vào newArray .
  4. indexPos là vị trí mà tại đó thao tác sao chép sẽ bắt đầu trong oldArray .
  5. độ dài là số giá trị sẽ được sao chép từ oldArray thành newArray .

Hãy xem qua một ví dụ để chứng minh phương thức copyOfRange () đang hoạt động. Giả sử chúng tôi muốn tạo một bản sao của coffees của chúng tôi mảng từ trước đó. Chúng tôi có thể làm như vậy bằng cách sử dụng mã này:

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ã của chúng tôi trả về:

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

Hãy chia nhỏ mã của chúng tôi:

  1. Chúng tôi nhập java.util.Arrays thư viện lưu trữ các phương thức copyOfRange () và toString () mà chúng tôi sẽ sử dụng trong ví dụ của mình.
  2. Chúng tôi khai báo một mảng có tên là coffees nơi lưu trữ các loại cà phê trên thực đơn tiêu chuẩn của chúng tôi.
  3. Chúng tôi khai báo một mảng có tên là summer_coffees và sử dụng phương thức copyOfRange () để tạo bản sao của coffees mảng. Các thông số chúng tôi chỉ định như sau:
    1. cà phê là tên của mảng mà chúng tôi muốn sao chép.
    2. chỉ định chúng tôi muốn sao chép các giá trị bắt đầu từ vị trí chỉ mục 0 từ coffees mảng.
    3. coffees.length chỉ định chúng tôi muốn sao chép mọi giá trị trong danh sách.
  4. Chúng tôi in ra "Summer coffees:" theo sau là mảng kết quả có tên là summer_coffees vào bảng điều khiển.

Bây giờ chúng tôi đã tạo một bản sao của “coffees của chúng tôi danh sách có tên summer_coffees .

Sử dụng phương thức Java Arrayopy ()

Phương thức arrayycopy () được sử dụng để sao chép dữ liệu từ mảng này sang mảng khác. Phương thức arrayycopy () là một phần của lớp System và bao gồm một số tùy chọn cho phép bạn tùy chỉnh bản sao bạn tạo của một mảng hiện có.

Đây là cú pháp của phương thức arrayycopy ():

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

Hãy chia nhỏ phương pháp này. copyarray () chấp nhận năm tham số:

  • sourceArray là tên của mảng bạn muốn sao chép.
  • startedPos là vị trí chỉ mục mà từ đó bạn muốn bắt đầu sao chép các giá trị trong source_array .
  • newArray là tên của mảng mới nơi các giá trị sẽ là bản sao.
  • newArrayStartingPos là vị trí chỉ mục mà tại đó các giá trị đã sao chép sẽ được thêm vào.
  • độ dài là số phần tử bạn muốn sao chép vào new_array .

Hãy quay lại quán cà phê. Giả sử chúng tôi muốn sao chép mọi giá trị trong coffees của mình mảng thành một mảng mới có tên là summer_coffees . Chúng tôi có thể làm như vậy bằng cách sử dụng mã này:

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ã của chúng tôi trả về:

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

Hãy chia nhỏ mã của chúng ta theo từng bước:

  1. Chúng tôi nhập java.util.Arrays gói khi bắt đầu chương trình của chúng tôi. Điều này bao gồm phương thức toString () mà chúng tôi sẽ sử dụng để in bản sao mảng mà chúng tôi tạo ở cuối chương trình của mình.
  2. Chúng tôi khai báo một mảng có tên là coffees nơi lưu trữ các loại cà phê trên thực đơn tiêu chuẩn của chúng tôi.
  3. Chúng tôi khởi tạo một mảng có tên là summer_coffees cái này sẽ chứa 6 giá trị.
  4. Chúng tôi sử dụng Arrayopy () để tạo một bản sao của coffees của chúng tôi mảng. Dưới đây là các tham số chúng tôi chỉ định:
    1. cà phê là mảng chúng tôi muốn sao chép.
    2. là vị trí mà chúng tôi muốn bản sao của mình bắt đầu trong coffees mảng.
    3. summer_coffees là mảng mà chúng tôi muốn các giá trị đã sao chép của mình được thêm vào.
    4. là vị trí mà chúng tôi muốn các giá trị đã sao chép bắt đầu được thêm vào summer_coffees mảng.
    5. coffees.length là số phần tử mảng mà chúng ta muốn sao chép. Trong trường hợp này, sử dụng coffees.length cho phép chúng tôi sao chép mọi thành phần từ coffees danh sách.
  5. Chúng tôi in ra một thông báo có nội dung "Các loại cà phê mùa hè:", sau đó là danh sách các loại cà phê mùa hè mà chúng tôi đã tạo.

Kết luận

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

Đầu tiên, chúng tôi thảo luận về cách tạo một bản sao cạn bằng toán tử gán, sau đó chúng tôi tiến hành giải thích cách tạo một bản sao sâu bằng cách sử dụng for vòng. Sau đó, chúng tôi khám phá cách sử dụng phương thức copyOfRange () để tạo bản sao của một mảng và cách phương thức hệ thống arrayycopy () được sử dụng để sao chép một mảng.

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