CodeGym /وبلاگ جاوا /Random-FA /چگونه اشیاء را در جاوا عوض کنیم؟
John Squirrels
مرحله
San Francisco

چگونه اشیاء را در جاوا عوض کنیم؟

در گروه منتشر شد
جابجایی اشیا یکی از محبوب ترین اقدامات در برنامه نویسی است. به ویژه در مرتب سازی مفید است. آنچه در مبادله اتفاق می افتد این است که دو متغیر مقادیر خود را مبادله می کنند. در این مقاله یاد می گیریم که چگونه اشیاء را در جاوا در دو حالت مختلف تعویض کنیم. یکی مبادله اشیاء مستقل و دیگری مبادله دو شی در یک لیست یا یک آرایه است. اجازه دهید ابتدا مبادله اشیاء مستقل را بررسی کنیم.چگونه اشیاء را در جاوا عوض کنیم؟  - 1

مبادله اشیاء با مبادله انواع داده های اولیه متفاوت است

یکی از روش‌های رایج برای مبادله مقادیر اولیه استفاده از یک متغیر زمانی است. با این حال، می‌دانید که جاوا هنگام ارسال پارامترها به یک متد از «Pass by Value» استفاده می‌کند. بنابراین، جابجایی اشیا آنطور که انتظار داشتید با این روش کار نخواهد کرد. مثال زیر آن را نشان خواهد داد.
public class ObjectSwapper {
    public static void main(String[] args) {
        InnerClass obj1 = new InnerClass(12345);
        InnerClass obj2 = new InnerClass(11111);
        swap(obj1, obj2);
        System.out.println("Obj1 ID value : " + obj1.id + "\n" + "Obj2 ID value :  " + obj2.id);
    }
    static void swap(InnerClass x, InnerClass y) {
        InnerClass temp;
        temp = x;
        x = y;
        y = temp;
    }
    static class InnerClass {
        public int id;
        public InnerClass(int Id) {
            this.id = Id;
        }
    }
}
خروجی: چگونه اشیاء را در جاوا عوض کنیم؟  - 2هیچ تعویضی وجود نداشت! وقتی متد swap را فراخوانی می کنیم و اشیا را ارسال می کنیم، یک کپی از شی را با تمام مقادیر ویژگی ارسال می کنیم. به همین دلیل است که به آن "Pass by Value" می گویند. روش swap در واقع اشیاء را مبادله می کند که فقط بر روی کپی شی اصلی تأثیر می گذارد. بنابراین اشیاء اصلی بدون تغییر نگه داشته می شوند. راه حل این کار استفاده از یک کلاس wrapper برای بسته بندی دو شی خواهد بود.

جابجایی اشیا با کلاس wrapper

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

        InnerClass obj1 = new InnerClass(12345);
        InnerClass obj2 = new InnerClass(11111);
        objectWrapper wrapperObj1 = new objectWrapper(obj1);
        objectWrapper wrapperObj2 = new objectWrapper(obj2);
        // Values before swapping
        System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
                + wrapperObj2.innerObject.id + "\n");

        swap(wrapperObj1, wrapperObj2);

        // Values after swapping
        System.out.println("WrapperObj1 InncerClass ID value : " + wrapperObj1.innerObject.id + "\n" + "WrapperObj2 InncerClass ID value : "
                + wrapperObj2.innerObject.id);
    }

       static void swap(objectWrapper wrapperObj1, objectWrapper wrapperObj2) {
        InnerClass temp;
        temp = wrapperObj1.innerObject;
        wrapperObj1.innerObject = wrapperObj2.innerObject;
        wrapperObj2.innerObject = temp;
    }

    static class InnerClass {
        public int id;
        public InnerClass(int Id) {
            id = Id;
        }
    }

    static class objectWrapper {
        InnerClass innerObject;
        public objectWrapper(InnerClass objInnner) {
            this.innerObject = objInnner;
        }
    }
}
در اینجا ما از یک کلاس wrapper استفاده کردیم که دارای خاصیت نوع آبجکت هایی است که باید مبادله کنیم. با استفاده از روش swap ساده، محتوای اشیاء InnerClass از اشیاء کلاس wrapper را مبادله می کند. برای اجرای بیشتر اشیاء InnerClass تعویض شده، می‌توانیم از wrapperObj1.xyz و wrapperObj2.xyz استفاده کنیم. خروجی:چگونه اشیاء را در جاوا عوض کنیم؟  - 3

متد swap() داخلی در جاوا

کلاس های Java Collections Framework دارای یک متد داخلی برای مبادله عناصر به نام swap() هستند . java.util یک کلاس کاربردی است که شامل متدهای ثابتی است که می تواند روی عناصری مانند Lists از رابط مجموعه کار کند. استفاده از روش swap بسیار ساده تر از مثالی است که قبلاً بحث کردیم. متد ()swap یک متد ثابت است و بنابراین شما آن را با نام کلاس به صورت Collections.swap() فراخوانی می کنید . نوع برگشتی متد swap() باطل است، بنابراین چیزی بر نمی گرداند. شما باید سه آرگومان را به متد ()swap ارسال کنید . یادداشت زیر را بررسی کنید.
swap(List<?> list, int a, int b)
مولفه های:
  • لیست - لیست شامل عناصری است که ما با هم عوض می کنیم.
  • الف - شاخص عنصری که باید مبادله شود .
  • b - شاخص عنصر دیگری که باید مبادله شود .
توجه داشته باشید که اگر a یا b خارج از محدوده اندازه لیست باشد، این روش یک IndexOutOfBoundsException ایجاد می کند. حداکثر شاخص لیست یک کمتر از اندازه لیست است. هر مقدار شاخص بیشتر از آن باعث می شود IndexOutOfBoundsException پرتاب شود. مثالی از نحوه استفاده از متد swap در ArrayList در زیر نشان داده شده است.

متد swap() در ArrayList

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ArrayListSwapper {
    public static void main(String[] args) {
        try {
            List fruits = new ArrayList();
            fruits.add("Mango");
            fruits.add("Papaya");
            fruits.add("Apple");
            fruits.add("Orange");
            fruits.add("Watermelon");
            fruits.add("Bael");
            System.out.println("Before swapping : " + fruits);
         //using Collection.swap() method
            Collections.swap(fruits, 2, 5);
            System.out.println("After swapping : " + fruits);
        } catch (IndexOutOfBoundsException e) {
            System.out.println("Index Out of Bound Exception thrown : " + e);
        }
    }
}
ArrayList میوه ها شامل شش عنصر است. ما عناصر دوم و پنجم را با استفاده از متد تابع swap مبادله می کنیم . بهترین روش این است که متد swap() را در یک بلوک try-catch بنویسید زیرا می تواند در زمان اجرا یک IndexOutOfBoundsException ایجاد کند. خروجی: چگونه اشیاء را در جاوا عوض کنیم؟  - 4اگر «2» و «8» را به‌عنوان ایندکس پاس کنیم، برنامه یک استثنا ایجاد می‌کند زیرا اندازه فهرست شش است.
Collections.swap(fruits, 2, 8);
خروجی خواهد بود:چگونه اشیاء را در جاوا عوض کنیم؟  - 5

نتیجه

در این آموزش، چند تکنیک مبادله مورد استفاده در جاوا را مورد بحث قرار دادیم. یکی از آنها از کلاس wrapper و دیگری از متد Collection.swap استفاده می کند . مهم است که به یاد داشته باشید که هنگام استفاده از تابع swap () باید رسیدگی به استثنا انجام شود زیرا یک استثنا در زمان اجرا ایجاد می کند.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION