GP Coder

Trang chia sẻ kiến thức lập trình Java

  • Java Core
    • Basic Java
    • OOP
    • Exception Handling
    • Multi-Thread
    • Java I/O
    • Networking
    • Reflection
    • Collection
    • Java 8
  • Design pattern
    • Creational Pattern
    • Structuaral Pattern
    • Behavior Pattern
  • Web Service
    • SOAP
    • REST
  • JPA
  • Java library
    • Report
    • Json
    • Unit Test
  • Message Queue
    • ActiveMQ
    • RabbitMQ
  • All
Trang chủ Java Core Basic Java Sao chép các phần tử của một mảng sang mảng khác như thế nào?

Sao chép các phần tử của một mảng sang mảng khác như thế nào?

Đăng vào 27/11/2017 . Được đăng bởi GP Coder . 14411 Lượt xem . Toàn màn hình

Chúng ta hãy xem xét chương trình sau đây:


package com.gpcoder.arrays;

public class CopyArrayExample1 {
	public static void main(String[] args) {

		int[] a = { 12, 21, 0, 5, 7 }; // Declaring and initializing an array of ints

		int[] b = a; // copying array 'a' to array 'b'

		// Printing elements of array 'b'
		for (int i = 0; i < b.length; i++) {
			System.out.println(b[i]);
		}

		a[2] = 56; // Changing value of 3rd element of array 'a'

		System.out.println(b[2]); // value of 3rd element of array 'b' also changes = 56

		b[4] = 100; // Changing value of 5th element of array 'b'

		System.out.println(a[4]); // value of 5th element of array 'a' also changes = 100
	}
}

Trong ví dụ trên, chúng ta đang khai báo một mảng kiểu int. Chúng ta sao chép mảng đó sang mảng khác kiểu int. Bạn có thể nhận thấy rằng, việc thay đổi giá trị của một mảng sẽ được phản ánh trong một mảng gốc nữa. Có nghĩa là cả hai biến mảng (a và b) đều trỏ đến cùng một đối tượng trong bộ nhớ. Điều này có thể được minh họa bằng sơ đồ dưới đây:

Nếu bạn sao chép một mảng bằng cách sử dụng phương pháp trên, các thay đổi được thực hiện trong một mảng sao chép sẽ được phản ánh trong mảng ban đầu. Thông thường, bạn không muốn những hành vi như vậy trong thực tế. Bạn có thể cần hai đối tượng mảng khác nhau với cùng một bộ các phần tử. Trong các tình huống như vậy, thay vì sử dụng phương pháp trên, chúng ta có thể sử dụng bất kỳ một trong các phương pháp sau đây:

Nội dung

  • 1 Sao chép mảng sử dụng vòng lặp for
  • 2 Sao chép mảng sử dụng phương thức copyOf() của lớp java.util.Arrays
  • 3 Sao chép mảng sử dụng phương thức clone() của lớp java.lang.Object
  • 4 Sử dụng phương thức arraycopy() của lớp System

Sao chép mảng sử dụng vòng lặp for


package com.gpcoder.arrays;

public class CopyArrayExample2 {
	public static void main(String[] args) {
		int[] a = { 12, 21, 0, 5, 7 }; // Declaring and initializing an array of ints

		int[] b = new int[a.length]; // Declaring and instantiating another array of ints with same length

		// Copy array
		for (int i = 0; i < a.length; i++) {
			b[i] = a[i];
		}

		// Now changing values of one array will not reflect in another array

		a[2] = 56; // Changing value of 3rd element in array 'a'

		System.out.println(b[2]); // value of 3rd element in array 'b' will not change = 0

		b[4] = 100; // Changing value of 5th element in array 'b'

		System.out.println(a[4]); // value of 5th element in array 'a' will not change = 7
	}
}

Sao chép mảng sử dụng phương thức copyOf() của lớp java.util.Arrays


package com.gpcoder.arrays;

import java.util.Arrays;

public class CopyArrayExample3 {
	public static void main(String[] args) {
		int[] a = { 12, 21, 0, 5, 7 }; // Declaring and initializing an array of ints

		// creating a copy of array 'a' using copyOf() method of java.util.Arrays class
		int[] b = Arrays.copyOf(a, a.length);

		// Printing elements of array 'b'
		for (int i = 0; i < b.length; i++) {
			System.out.println(b[i]);
		}

		// Now changing values of one array will not reflect in other array

		a[2] = 56; // Changing value of 3rd element in array 'a'

		System.out.println(b[2]); // value of 3rd element in array 'b' will not change = 0

		b[4] = 100; // Changing value of 5th element in array 'b'

		System.out.println(a[4]); // value of 5th element in array 'a' will not change = 7
	}
}

Sao chép mảng sử dụng phương thức clone() của lớp java.lang.Object

package com.gpcoder.arrays;

public class CopyArrayExample4 {
	public static void main(String[] args) {
		int[] a = { 12, 21, 0, 5, 7 }; // Declaring and initializing an array of ints

		// creating a copy of array 'a' using clone() method
		int[] b = a.clone();

		// Printing elements of array 'b'
		for (int i = 0; i < b.length; i++) {
			System.out.println(b[i]);
		}

		// Now changing values of one array will not reflect in other array

		a[2] = 56; // Changing value of 3rd element in array 'a'

		System.out.println(b[2]); // value of 3rd element in array 'b' will not change = 0

		b[4] = 100; // Changing value of 5th element in array 'b'

		System.out.println(a[4]); // value of 5th element in array 'a' will not change = 7
	}
}

Sử dụng phương thức arraycopy() của lớp System


package com.gpcoder.arrays;

public class CopyArrayExample5 {
	public static void main(String[] args) {
		int[] a = { 12, 21, 0, 5, 7 }; // Declaring and initializing an array of ints

		// Creating an array object of same length as array 'a'
		int[] b = new int[a.length];

		// creating a copy of array 'a' using arraycopy() method of System class
		System.arraycopy(a, 0, b, 0, a.length);

		// Printing elements of array 'b'
		for (int i = 0; i < b.length; i++) {
			System.out.println(b[i]);
		}

		// Now changing values of one array will not reflect in other array

		a[2] = 56; // Changing value of 3rd element in array 'a'

		System.out.println(b[2]); // value of 3rd element in array 'b' will not change = 0

		b[4] = 100; // Changing value of 5th element in array 'b'

		System.out.println(a[4]); // value of 5th element in array 'a' will not change = 7
	}
}

5.0
11
Nếu bạn thấy hay thì hãy chia sẻ bài viết cho mọi người nhé! Và Donate tác giả

Shares

Chuyên mục: Basic Java Được gắn thẻ: Basic Java, Collection, How to

Lớp Arrarys trong Java (Arrays Utility Class)
Loại bỏ các phần tử trùng trong một ArrayList như thế nào?

Có thể bạn muốn xem:

  • Truyền giá trị (pass by value) trong java (03/11/2017)
  • Tạo chương trình Java đầu tiên sử dụng Eclipse IDE (19/10/2017)
  • Tổng quan về ngôn ngữ lập trình java (18/10/2017)
  • Câu lệnh điều khiển vòng lặp trong Java (break, continue) (27/10/2017)
  • Tiêu chuẩn coding trong Java (Coding Standards) (21/10/2017)

Bình luận

bình luận

Tìm kiếm

Bài viết mới

  • Clean code 13/01/2024
  • Giới thiệu CloudAMQP – Một RabbitMQ server trên Cloud 02/10/2020
  • Kết nối RabbitMQ sử dụng Web STOMP Plugin 19/06/2020
  • Sử dụng publisher confirm trong RabbitMQ 16/06/2020
  • Sử dụng Dead Letter Exchange trong RabbitMQ 13/06/2020

Xem nhiều

  • Hướng dẫn Java Design Pattern – Factory Method (98065 lượt xem)
  • Hướng dẫn Java Design Pattern – Singleton (97704 lượt xem)
  • Giới thiệu Design Patterns (87776 lượt xem)
  • Lập trình đa luồng trong Java (Java Multi-threading) (86444 lượt xem)
  • Giới thiệu về Stream API trong Java 8 (83840 lượt xem)

Nội dung bài viết

  • 1 Sao chép mảng sử dụng vòng lặp for
  • 2 Sao chép mảng sử dụng phương thức copyOf() của lớp java.util.Arrays
  • 3 Sao chép mảng sử dụng phương thức clone() của lớp java.lang.Object
  • 4 Sử dụng phương thức arraycopy() của lớp System

Lưu trữ

Thẻ đánh dấu

Annotation Authentication Basic Java Behavior Pattern Collection Creational Design Pattern Cấu trúc điều khiển Database Dependency Injection Design pattern Eclipse Exception Executor Service Google Guice Gson Hibernate How to Interceptor IO Jackson Java 8 Java Core JDBC JDK Jersey JMS JPA json JUnit JWT Message Queue Mockito Multithreading OOP PowerMockito RabbitMQ Reflection Report REST SOAP Structuaral Pattern Swagger Thread Pool Unit Test Webservice

Liên kết

  • Clean Code
  • JavaTpoint
  • Refactoring Guru
  • Source Making
  • TutorialsPoint
  • W3Schools Online Web Tutorials

Giới thiệu

GP Coder là trang web cá nhân, được thành lập với mục đích lưu trữ, chia sẽ kiến thức đã học và làm việc của tôi. Các bài viết trên trang này chủ yếu về ngôn ngữ Java và các công nghệ có liên quan đến Java như: Spring, JSF, Web Services, Unit Test, Hibernate, SQL, ...
Hi vọng góp được chút ít công sức cho sự phát triển cộng đồng Coder Việt.

Donate tác giả

Tìm kiếm các bài viết của GP Coder với Google Search

Liên hệ

Các bạn có thể liên hệ với tôi thông qua:
  • Trang liên hệ
  • Linkedin: gpcoder
  • Email: contact@gpcoder.com
  • Skype: ptgiang56it

Follow me

Copyright 2025 © GP Coder · All Rights Reserved · Giới thiệu · Chính sách · Điều khoản · Liên hệ ·

Share

Blogger
Delicious
Digg
Email
Facebook
Facebook messenger
Flipboard
Google
Hacker News
Line
LinkedIn
Mastodon
Mix
Odnoklassniki
PDF
Pinterest
Pocket
Print
Reddit
Renren
Short link
SMS
Skype
Telegram
Tumblr
Twitter
VKontakte
wechat
Weibo
WhatsApp
X
Xing
Yahoo! Mail

Copy short link

Copy link