]-->lang="fa-IR"> آموزش کپی آرایه های جاوا | مرکز درس

آموزش کپی آرایه های جاوا

در این آموزش مرکز درس، می خواهیم انواع روش های کپی کردن آرایه ها در جاوا را به شما آموزش دهیم. همانطور که می دانید با روش های مختلفی می توانید آرایه های زبان جاوا را کپی کنید (هم یک بعدی و هم دو بعدی). پس با ما همراه باشید تا این تکنیک ها را یاد بگیرید :

۱- کپی کردن آرایه ها با استفاده از عملگر انتساب

بیایید مثالی بزنیم ،

  1. class CopyArray {
  2. public static void main(String[] args) {
  3. int [] numbers = {1, 2, 3, 4, 5, 6};
  4. int [] positiveNumbers = numbers; // copying arrays
  5. for (int number: positiveNumbers) {
  6. System.out.print(number + “, “);
  7. }
  8. }
  9. }

خروجی

۱, ۲, ۳, ۴, ۵, ۶

اگرچه به نظر می رسد این روش برای کپی کردن آرایه ها کاملا کارآمد است ، اما مشکلی در این مورد وجود دارد.

اگر عناصر یک آرایه را در مثال بالا تغییر دهید ، عناصر مربوط به آرایه دیگر نیز تغییر می کند.

  1. class AssignmentOperator {
  2. public static void main(String[] args) {
  3. int [] numbers = {1, 2, 3, 4, 5, 6};
  4. int [] positiveNumbers = numbers; // copying arrays
  5. numbers[0] = -1;
  6. for (int number: positiveNumbers) {
  7. System.out.print(number + “, “);
  8. }
  9. }
  10. }

خروجی

-۱, ۲, ۳, ۴, ۵, ۶

هنگامی که اولین عنصر آرایه numbers به -۱ تغییر می کند، اولین عنصر آرایه positiveNumbers نیز به -۱ تبدیل می شود. به این دلیل که هر دو آرایه به یک شیء آرایه یکسان اشاره دارند.

بیشتر بخوانید :   همه چیز در مورد کنکور زبان

به این کار کپی سطحی گفته می شود.

با این حال ، بیشتر اوقات ، به جای کپی سطحی ، به کپی عمیق نیاز داریم. یک کپی عمیق مقادیر ایجاد شی آرایه جدید را کپی می کند.

۲- استفاده از ساختار حلقه برای کپی کردن آرایه ها

بیایید یک مثال بزنیم:

  1. import java.util.Arrays;
  2. class ArraysCopy {
  3. public static void main(String[] args) {
  4. int [] source = {1, 2, 3, 4, 5, 6};
  5. int [] destination = new int[6];
  6. for (int i = 0; i < source.length; ++i) {
  7. destination[i] = source[i];
  8. }
  9. // converting array to string
  10. System.out.println(Arrays.toString(destination));
  11. }
  12. }

خروجی

[۱, ۲, ۳, ۴, ۵, ۶]

در اینجا ، از حلقه برای کپی عناصر آرایه منبع استفاده می شود. در هر تکرار ، عنصر متناظر از آرایه منبع در آرایه مقصد کپی می شود.

آرایه منبع و مقصد مرجع یکسان ندارند (کپی عمیق). به این معنی که اگر عناصر یک آرایه (یا منبع یا مقصد) تغییر یابد ، عناصر مربوط به آرایه دیگر تغییر نمی کند.

از متد ()toString برای تبدیل آرایه به رشته (فقط برای خروجی) استفاده می شود.

روش بهتری (بهتر از حلقه ها) برای کپی کردن آرایه ها در جاوا با استفاده از ()arraycopy و ()copyOfRange وجود دارد.

۳- کپی کردن آرایه ها با ()arraycopy

کلاس System شامل متد ()arraycopy است که به شما امکان می دهد داده ها را از یک آرایه به دیگری کپی کنید.

روش ()arraycopy کارآمد و انعطاف پذیر است. این روش به شما امکان می دهد بخش مشخصی از آرایه منبع را به آرایه مقصد کپی کنید.

public static void arraycopy(Object src, int srcPos,

Object dest, int destPos, int length)

در اینجا،

  • src – آرایه ای که می خواهید کپی کنید
  • srcPos – موقعیت شروع (شاخص) در آرایه src
  • dest – عناصر آرایه src در این آرایه کپی می شوند
  • destPos – موقعیت شروع (شاخص) در آرایه مقصد
  • length – تعداد عناصر برای کپی کردن
بیشتر بخوانید :   خم ‌سازی و لحیم کاری

بیایید یک مثال بزنیم:

  1. // To use Arrays.toString() method
  2. import java.util.Arrays;
  3. class ArraysCopy {
  4. public static void main(String[] args) {
  5. int[] n1 = {2, 3, 12, 4, 12, -2};
  6. int[] n3 = new int[5];
  7. // Creating n2 array of having length of n1 array
  8. int[] n2 = new int[n1.length];
  9. // copying entire n1 array to n2
  10. System.arraycopy(n1, 0, n2, 0, n1.length);
  11. System.out.println(“n2 = ” + Arrays.toString(n2));
  12. // copying elements from index 2 on n1 array
  13. // copying element to index 1 of n3 array
  14. // ۲ elements will be copied
  15. System.arraycopy(n1, 2, n3, 1, 2);
  16. System.out.println(“n3 = ” + Arrays.toString(n3));
  17. }
  18. }

خروجی

n2 = [2, 3, 12, 4, 12, -2]

n3 = [0, 12, 4, 0, 0]

توجه داشته باشید ، مقدار اولیه پیش فرض عناصر یک آرایه از نوع عدد صحیح ۰ است.

۴- کپی کردن آرایه ها با روش ()copyOfRange

علاوه بر این ، می توانید از روش ()copyOfRange تعریف شده در کلاس java.util.Arrays برای کپی کردن آرایه ها استفاده کنید. احتیاجی نیست قبل استفاده از این روش آرایه مقصد را ایجاد کنید.

در این جا نحوه انجام این کار آورده شده است.

  1. // To use toString() and copyOfRange() method
  2. import java.util.Arrays;
  3. class ArraysCopy {
  4. public static void main(String[] args) {
  5. int[] source = {2, 3, 12, 4, 12, -2};
  6. // copying entire source array to destination
  7. int[] destination1 = Arrays.copyOfRange(source, 0, source.length);
  8. System.out.println(“destination1 = ” + Arrays.toString(destination1));
  9. // copying from index 2 to 5 (5 is not included)
  10. int[] destination2 = Arrays.copyOfRange(source, 2, 5);
  11. System.out.println(“destination2 = ” + Arrays.toString(destination2));
  12. }
  13. }

خروجی

destination1 = [2, 3, 12, 4, 12, -2]

destination2 = [12, 4, 12]

۵- کپی کردن آرایه های دو بعدی با استفاده از حلقه

مثالی برای کپی کردن آرایه های دو بعدی نامنظم با استفاده از حلقه وجود دارد:

  1. import java.util.Arrays;
  2. class ArraysCopy {
  3. public static void main(String[] args) {
  4. int[][] source = {
  5. {۱, ۲, ۳, ۴},
  6. {۵, ۶},
  7. {۰, ۲, ۴۲, -۴, ۵}
  8. };
  9. int[][] destination = new int[source.length][];
  10. for (int i = 0; i < destination.length; ++i) {
  11. // allocating space for each row of destination array
  12. destination[i] = new int[source[i].length];
  13. for (int j = 0; j < destination[i].length; ++j) {
  14. destination[i][j] = source[i][j];
  15. }
  16. }
  17. // displaying destination array
  18. System.out.println(Arrays.deepToString(destination));
  19. }
  20. }

خروجی

[[۱, ۲, ۳, ۴], [۵, ۶], [۰, ۲, ۴۲, -۴, ۵]]

در کد بالا از روش() Arrays.deepToString  استفاده کردیم. ()deepToString نمایش بهتری از یک آرایه چند بعدی را مانند یک آرایه ۲ بعدی فراهم می کند.

بیشتر بخوانید :   آموزش نمادها در HTML

می توانید حلقه داخلی کد فوق را با ()System.arraycopy یا()Arrays.copyOf مانند آرایه یک بعدی جایگزین کنید.

در اینجا مثالی برای انجام همان کار با روش ()arraycopy آورده شده است.

  1. import java.util.Arrays;
  2. class AssignmentOperator {
  3. public static void main(String[] args) {
  4. int[][] source = {
  5. {۱, ۲, ۳, ۴},
  6. {۵, ۶},
  7. {۰, ۲, ۴۲, -۴, ۵}
  8. };
  9. int[][] destination = new int[source.length][];
  10. for (int i = 0; i < source.length; ++i) {
  11. // allocating space for each row of destination array
  12. destination[i] = new int[source[i].length];
  13. System.arraycopy(source[i], 0, destination[i], 0, destination[i].length);
  14. }
  15. // displaying destination array
  16. System.out.println(Arrays.deepToString(destination));
  17. }
  18. }
ساسان سروشه

نوشته‌های مرتبط

دیدگاه‌ها

*
*