CodeGym /مدونة جافا /Random-AR /كيفية تبديل الكائنات في جافا؟
John Squirrels
مستوى
San Francisco

كيفية تبديل الكائنات في جافا؟

نشرت في المجموعة
يعد تبديل الكائنات أحد أكثر الإجراءات شيوعًا في البرمجة. إنها مفيدة بشكل خاص في الفرز. ما يحدث في المبادلة هو أن متغيرين يتبادلان قيمهما. في هذه المقالة، نتعلم كيفية تبديل الكائنات في Java في حالتين مختلفتين. أحدهما هو مبادلة كائنات مستقلة والآخر هو مبادلة كائنين في قائمة أو صفيف. دعونا أولاً نفحص مبادلة الكائنات المستقلة.كيفية تبديل الكائنات في جافا؟  - 1

يختلف تبديل الكائنات عن تبديل أنواع البيانات البدائية

إحدى الطرق الشائعة المستخدمة لمبادلة القيم الأولية هي استخدام متغير زمني. ومع ذلك، فأنت تعلم أن Java تستخدم "التمرير حسب القيمة" عند تمرير المعلمات إلى إحدى الطرق. ولذلك، لن يعمل تبديل الكائنات كما توقعت باستخدام هذه الطريقة. المثال التالي سيوضح ذلك.
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لم يكن هناك مبادلة! عندما نستدعي طريقة المبادلة ونمرر الكائنات، فإننا نمرر نسخة من الكائن، مع جميع قيم الخاصية. هذا هو السبب في أنه يطلق عليه "التمرير حسب القيمة". تقوم طريقة المبادلة فعليًا بتبديل الكائنات التي تؤثر فقط على نسخة الكائن الأصلي. لذلك يتم الاحتفاظ بالأشياء الأصلية دون تغيير. سيكون الحل لهذا هو استخدام فئة مجمعة لتغليف الكائنين.

مبادلة الكائنات مع فئة المجمع

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;
        }
    }
}
استخدمنا هنا فئة مجمعة تحتوي على خاصية نوع الكائنات التي نحتاج إلى تبديلها. باستخدام أسلوب مبادلة بسيط، فإنه يقوم بتبديل محتوى كائنات InnerClass الخاصة بكائنات فئة المجمّع. لأي تنفيذ إضافي لكائنات InnerClass التي تم تبديلها، يمكننا استخدام WrapperObj1.xyz وwrapperObj2.xyz وفقًا لذلك. الإخراج:كيفية تبديل الكائنات في جافا؟  - 3

طريقة المبادلة () المضمنة في Java

تحتوي فئات Java Collections Framework على طريقة مدمجة لتبديل العناصر تسمى المبادلة() . java.util عبارة عن فئة أداة مساعدة تحتوي على طرق ثابتة يمكنها العمل على عناصر مثل القوائم من واجهة المجموعة . يعد استخدام طريقة المبادلة أسهل بكثير من المثال الذي ناقشناه سابقًا. طريقة المبادلة () هي طريقة ثابتة وبالتالي يمكنك استدعاؤها باستخدام اسم الفئة كـ Collections.swap() . نوع الإرجاع لطريقة المبادلة () باطل لذا لن يُرجع أي شيء. تحتاج إلى تمرير ثلاث وسائط إلى طريقة المبادلة () . تحقق من الملاحظة أدناه.
swap(List<?> list, int a, int b)
حدود:
  • القائمة - تحتوي القائمة على العناصر التي نقوم بتبديلها.
  • أ — فهرس العنصر المراد تبديله .
  • ب — فهرس عنصر آخر ليتم تبديله .
لاحظ أن هذه الطريقة ستطرح استثناء IndexOutOfBoundsException إذا كان a أو b خارج نطاق حجم القائمة. الحد الأقصى لفهرس القائمة أقل من حجم القائمة بمقدار واحد. أي قيمة فهرس أكبر من ذلك ستتسبب في طرح IndexOutOfBoundsException. يظهر أدناه مثال لكيفية استخدام طريقة المبادلة على ArrayList.

طريقة المبادلة () على 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() . أفضل الممارسات هي كتابة طريقة المبادلة () داخل كتلة محاولة الالتقاط حيث يمكنها طرح IndexOutOfBoundsException في وقت التشغيل. الإخراج: إذا مررنا '2' و'8' كفهارس، فسيطرح التطبيق استثناءً لأن حجم القائمة هو ستة. كيفية تبديل الكائنات في جافا؟  - 4
Collections.swap(fruits, 2, 8);
سيكون الإخراج:كيفية تبديل الكائنات في جافا؟  - 5

خاتمة

في هذا البرنامج التعليمي، ناقشنا اثنين من تقنيات المبادلة المستخدمة في جافا. أحدهما يستخدم فئة مجمعة والآخر يستخدم طريقة Collection.swap() . من المهم أن تتذكر أن معالجة الاستثناءات يجب أن تتم عند استخدام الدالة المبادلة () لأنها تطرح استثناءً في وقت التشغيل.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION