CodeGym /Java Blog /এলোমেলো /কিভাবে জাভাতে বস্তু অদলবদল করবেন?
John Squirrels
লেভেল 41
San Francisco

কিভাবে জাভাতে বস্তু অদলবদল করবেন?

এলোমেলো দলে প্রকাশিত
অদলবদল অবজেক্ট প্রোগ্রামিং এর সবচেয়ে জনপ্রিয় ক্রিয়াগুলির মধ্যে একটি। এটি সাজানোর ক্ষেত্রে বিশেষভাবে কার্যকর। সোয়াপিংয়ে যা ঘটে তা হল দুটি ভেরিয়েবল তাদের মান বিনিময় করে। এই নিবন্ধে, আমরা শিখব কিভাবে দুটি ভিন্ন ক্ষেত্রে জাভাতে বস্তুর অদলবদল করা যায়। একটি হল স্বাধীন বস্তুর অদলবদল করা এবং অন্যটি একটি তালিকা বা একটি অ্যারেতে দুটি বস্তুকে অদলবদল করছে। আসুন প্রথমে স্বাধীন বস্তুর অদলবদল পরীক্ষা করা যাক।কিভাবে জাভাতে বস্তু অদলবদল করবেন?  - ১

বস্তুর অদলবদল আদিম ডেটা প্রকারের অদলবদল থেকে আলাদা

আদিম মান অদলবদল করার জন্য একটি সাধারণ পদ্ধতি হল একটি অস্থায়ী পরিবর্তনশীল ব্যবহার করা। যাইহোক, আপনি জানেন যে একটি পদ্ধতিতে প্যারামিটারগুলি পাস করার সময় জাভা "প্যাস বাই ভ্যালু" ব্যবহার করে। অতএব, বস্তুর অদলবদল আপনি এই পদ্ধতির সাথে প্রত্যাশিত হিসাবে কাজ করবে না। নিম্নলিখিত উদাহরণ এটি দেখাবে.

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 অবজেক্টগুলির আরও বাস্তবায়নের জন্য, আমরা সেই অনুযায়ী wrapperObj1.xyz এবং wrapperObj2.xyz ব্যবহার করতে পারি। আউটপুট:কিভাবে জাভাতে বস্তু অদলবদল করবেন?  - 3

জাভাতে অন্তর্নির্মিত swap() পদ্ধতি

জাভা কালেকশন ফ্রেমওয়ার্কের ক্লাসে swap() নামক উপাদান অদলবদল করার জন্য একটি অন্তর্নির্মিত পদ্ধতি রয়েছে । java.util হল একটি ইউটিলিটি ক্লাস যেখানে স্ট্যাটিক পদ্ধতি রয়েছে যা সংগ্রহ ইন্টারফেসের তালিকার মতো উপাদানগুলিতে কাজ করতে পারে swap পদ্ধতি ব্যবহার করা আমরা আগে আলোচনা করা উদাহরণের চেয়ে অনেক সহজ। swap () পদ্ধতিটি একটি স্থির পদ্ধতি এবং তাই আপনি এটিকে Collections.swap() হিসাবে ক্লাসের নাম দিয়ে ডাকবেন । swap() পদ্ধতির রিটার্ন টাইপ অকার্যকর তাই এটি কিছু ফেরত দেবে না। আপনাকে swap() পদ্ধতিতে তিনটি আর্গুমেন্ট পাস করতে হবে । নীচের নোট চেক করুন.

swap(List<?> list, int a, int b)
পরামিতি:
  • তালিকা - তালিকায় আমরা যে উপাদানগুলি অদলবদল করি তা রয়েছে।
  • a — অদলবদল করার জন্য একটি উপাদানের সূচক ।
  • b — অদলবদল করা অন্য উপাদানের সূচক ।
মনে রাখবেন যে এই পদ্ধতিটি একটি IndexOutOfBoundsException নিক্ষেপ করবে যদি a বা b তালিকা আকারের সীমার বাইরে থাকে। তালিকার সর্বোচ্চ সূচক তালিকার আকারের চেয়ে এক কম। এর থেকে বেশি যেকোন সূচকের মান IndexOutOfBoundsException নিক্ষেপ করা হবে। একটি ArrayList এ কিভাবে সোয়াপ পদ্ধতি ব্যবহার করতে হয় তার একটি উদাহরণ নিচে দেখানো হয়েছে।

একটি ArrayList এ swap() পদ্ধতি


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);
        }
    }
}
ফলের অ্যারেলিস্টে ছয়টি উপাদান রয়েছে। আমরা ফাংশন swap() পদ্ধতি ব্যবহার করে 2nd এবং 5th উপাদান অদলবদল করি ট্রাই-ক্যাচ ব্লকের মধ্যে swap() পদ্ধতিটি লেখার সর্বোত্তম অনুশীলন কারণ এটি রান টাইমে একটি IndexOutOfBoundsException নিক্ষেপ করতে পারে। আউটপুট: যদি আমরা সূচী হিসাবে '2' এবং '8' পাস করি তবে তালিকার আকার ছয় হওয়ায় অ্যাপ্লিকেশনটি ব্যতিক্রম হবে। কিভাবে জাভাতে বস্তু অদলবদল করবেন?  - 4

Collections.swap(fruits, 2, 8);
আউটপুট হবে:কিভাবে জাভাতে বস্তু অদলবদল করবেন?  - 5

উপসংহার

এই টিউটোরিয়ালে, আমরা জাভাতে ব্যবহৃত কয়েকটি অদলবদল কৌশল নিয়ে আলোচনা করেছি। তাদের মধ্যে একটি র্যাপার ক্লাস ব্যবহার করছে এবং অন্যটি Collection.swap() পদ্ধতি ব্যবহার করছে। এটা মনে রাখা গুরুত্বপূর্ণ যে ফাংশন swap() ব্যবহার করার সময় ব্যতিক্রম হ্যান্ডলিং করা উচিত কারণ এটি একটি রানটাইম ব্যতিক্রম নিক্ষেপ করে।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION