CodeGym /Java Blog /এলোমেলো /জাভাতে সংগ্রহের ক্লাস
John Squirrels
লেভেল 41
San Francisco

জাভাতে সংগ্রহের ক্লাস

এলোমেলো দলে প্রকাশিত
ওহে! বিগত কয়েকটি পাঠে, আমরা আমাদের আয়ত্তে দারুণ উন্নতি করেছি ArrayList। যাইহোক, এখন পর্যন্ত আমরা শুধুমাত্র সবচেয়ে সহজ ক্রিয়াকলাপগুলি সম্পাদন করেছি: সরান, সন্নিবেশ করান এবং প্রদর্শন করুন৷ অবশ্যই, এটি কাজগুলির সম্পূর্ণ তালিকাকে কভার করে না যেগুলির সাথে কাজ করার সময় বিকাশকারীদের অবশ্যই সম্পাদন করতে হবে ArrayList৷ অ্যারে এবং ক্লাস সম্পর্কে পাঠ মনে আছে Arrays? অ্যারের সাথে কাজ করার সময় প্রোগ্রামারদের সবচেয়ে সাধারণ কাজগুলি পরিচালনা করার জন্য জাভা-এর নির্মাতারা বিশেষভাবে এই ক্লাসটি ডিজাইন করেছেন। এবং কি সম্পর্কেArrayList? অবশ্যই, সাধারণ কাজের কিছু তালিকা রয়েছে যা এটির সাথে সম্পাদন করা দরকার। সেগুলি কি একটি নির্দিষ্ট শ্রেণিতে প্রয়োগ করা হয়েছে, নাকি প্রতিবার আমাদের নিজস্ব বাস্তবায়ন লিখতে হবে? অবশ্যই, আপনার নিজের সবকিছু লিখতে হবে না। সংগ্রহের সাথে জড়িত সর্বাধিক সাধারণ ক্রিয়াকলাপগুলি ইতিমধ্যে বিশেষ স্ট্যাটিক Collectionsক্লাসে প্রয়োগ করা হয়েছে। কালেকশন ক্লাস- 1 জাভাতে, ডেটা স্ট্রাকচারের একটি গ্রুপকে সাধারণত একটি সংগ্রহ হিসাবে উল্লেখ করা হয় । ডেটা বিভিন্ন উপায়ে সংরক্ষণ করা যেতে পারে। এখন পর্যন্ত, আমরা শুধুমাত্র ক্লাস অধ্যয়ন করেছি ArrayList, যেখানে ডেটা একটি অ্যারেতে সংরক্ষণ করা হয়। আমরা পরে অন্যান্য সংগ্রহের সাথে পরিচিত হবে. আপাতত, এটা বোঝার জন্য যথেষ্ট যে Collectionsক্লাসটি কেবলমাত্র কাজ করার জন্য নয়ArrayList, কিন্তু অন্যান্য ধরনের সংগ্রহের সাথে (অতএব, এর নাম)। সুতরাং, Collectionsক্লাসটি আসলে কোন কাজের সাথে কাজ করার সময় সাহায্য করে ArrayList? প্রথম এবং সবচেয়ে সুস্পষ্ট বাছাই হয়. অ্যারে সম্পর্কে পাঠে, আমরা সংখ্যা সহ একটি উদাহরণ বিবেচনা করেছি। এখন আমরা স্ট্রিং সহ একটি উদাহরণ বিবেচনা করব। ক্লাসটি সংগ্রহের বিষয়বস্তু বাছাই করার পদ্ধতি Collectionsপ্রয়োগ করে :sort()

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       System.out.println(solarSystem);

   }
}
আউটপুট: [পৃথিবী, বৃহস্পতি, মঙ্গল, বুধ, নেপচুন, শনি, ইউরেনাস, শুক্র] স্ট্রিংগুলি বর্ণানুক্রমিকভাবে সাজানো হয়েছে! কিন্তু বর্ণানুক্রমিকভাবে কেন? ক্লাসটি Stringআসলে যুক্তি প্রয়োগ করে যা নিয়ন্ত্রণ করে কিভাবে স্ট্রিংগুলি তুলনা করা হয় (যা বর্ণানুক্রমিকভাবে হয়)। আপনার নিজের তৈরি করা ক্লাসগুলির জন্য, আপনি আপনার নিজের তুলনা যুক্তি প্রয়োগ করতে পারেন, তবে আমরা অন্যান্য পাঠে এটি সম্পর্কে কথা বলব। ক্লাসটি Collectionsআপনাকে একটি ন্যূনতম এবং সর্বাধিক উপাদান খুঁজে পেতে সহায়তা করে ArrayListmin()এটি এবং পদ্ধতি ব্যবহার করে করা হয় max():

public static void main(java.lang.String[] args) {

   ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7));
   System.out.println(Collections.max(numbers));
   System.out.println(Collections.min(numbers));

}
আউটপুট: 7 1 স্বাভাবিকভাবেই, সমস্ত উপাদানের উপর পুনরাবৃত্তি করতে এবং বৃহত্তম/ছোটতম উপাদান খুঁজে বের করার জন্য ম্যানুয়ালি কোড লেখার চেয়ে এটি অনেক বেশি সুবিধাজনক :) আরেকটি খুব দরকারী পদ্ধতি reverse()। যদি আমাদের তালিকাটি "উল্টাতে" হয় যাতে উপাদানগুলি বিপরীত ক্রমে চলে যায়, আমরা কীভাবে এটি করব? এটি সম্ভবত নিজের দ্বারা এই ধরনের একটি অ্যালগরিদম লিখতে এত সহজ হবে না :) সৌভাগ্যবশত, পদ্ধতিটি reverse()ইতিমধ্যেই জানে কিভাবে। ধরুন যে পদ্ধতিটি আমাদের গ্রহগুলিকে বর্ণানুক্রমিকভাবে সাজিয়েছে তা আমরা পছন্দ করি না sort()এবং আমরা তাদের ক্রম বিপরীত করতে চাই: Z থেকে A:

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune));
       Collections.sort(solarSystem);
       Collections.reverse(solarSystem);
       System.out.println(solarSystem);

   }
}
আউটপুট: [শুক্র, ইউরেনাস, শনি, নেপচুন, বুধ, মঙ্গল, বৃহস্পতি, পৃথিবী] আমরা বাছাই, উপাদানের ক্রম ইত্যাদি সম্পর্কে অনেক কথা বলেছি। কিন্তু যদি আমাদের উদ্দেশ্য বিপরীত হয়? উদাহরণস্বরূপ, ধরুন আমরা একটি বিঙ্গো গেম বাস্তবায়ন করার চেষ্টা করছি। আমরা ড্রামে 100 নম্বর যোগ করি। তারা একটি সময়ে একটি পর্দায় উপস্থিত হওয়া উচিত. প্রথম খেলোয়াড় যিনি তার টিকিটের সমস্ত নম্বর ক্রস আউট করেন। এই পদ্ধতি ব্যবহার করে বাস্তবায়ন করা সহজ shuffle():

public class Main {

   public static void main(java.lang.String[] args) {

       ArrayList<Integer> bingoDrum = new ArrayList<>(100);
       for (int i = 1; i <= 100; i++) {

           bingoDrum.add(i);// add the numbers 1 to 100 to the drum
       }

       Collections.shuffle(bingoDrum);// Mix it up
       System.out.println ("Your attention, please! Here are the first 10 numbers from the drum!");
       for (int i = 0; i < 10; i++) {

           System.out.println(bingoDrum.get(i));
       }

   }
}
আউটপুট: আপনার মনোযোগ, দয়া করে! এখানে ড্রাম থেকে প্রথম 10 নম্বর আছে! 32 61 4 81 25 8 66 35 42 71 এটা এত সহজ! সমস্যাটি সমাধান করা হয়েছে, এবং গেমের আমাদের অংশটি লেখা হয়েছে :) এখন এর একটি ভিন্ন পরিস্থিতি কল্পনা করা যাক। পূর্বে, আমরা একটি solarSystemতালিকা তৈরি করেছি যাতে গ্রহগুলি ছিল। এবং এটি একটি বাদে প্রতিটি উপায়ে আমাদের জন্য উপযুক্ত বলে মনে হচ্ছে: আপনি এটি থেকে আইটেমগুলি মুছতে এবং নতুন যোগ করতে পারেন ! এটি স্পষ্টতই আমরা যে আচরণ আশা করি তা নয়: সৌরজগৎ আমাদের প্রোগ্রামে অপরিবর্তনীয় হওয়া উচিত। ক্লাসের Collectionsএকটি খুব আকর্ষণীয় পদ্ধতি আছে: unmodifiableList(). এটি একটি যুক্তি হিসাবে পাস করা তালিকা থেকে একটি অপরিবর্তনীয় তালিকা তৈরি করে। আপনি এই তালিকা থেকে আইটেম যোগ বা মুছে ফেলতে পারবেন না. সৌরজগতের গ্রহের তালিকা নিয়ে কাজ করার সময়, আমরা ঠিক এটাই চাই!

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       List<String> solarSystem = Collections.unmodifiableList(new ArrayList<>(Arrays.asList(mercury, venus, earth, mars,
               jupiter, saturn, uranus, neptune)));
       solarSystem.add("Pluto");// Try to add a new element
   }
}
আউটপুট: থ্রেড "main" java.lang.UnsupportedOperationException-এ java.util.Collections$UnmodifiableCollection.add(Collections.java:1075) Main.main(Main.java:21) এ ব্যতিক্রম এটি একটি ত্রুটি: আপনি পারবেন না কিছু যোগ করুন solarSystem! এখানে শুধুমাত্র আপনাকে মনোযোগ দিতে হবে তা হল এই পদ্ধতিটি ফিরে আসে List<>(না ArrayList<>), যেহেতু এই প্রকারটি সব ধরণের তালিকার জন্য সাধারণ। আরেকটি বেশ সাধারণ পরিস্থিতি যা সহজেই ঘটতে পারে তা হল প্রোগ্রামারকে ভুল ক্রমে উপাদান যুক্ত করা। যদি এটি ঘটে এবং আমরা দেখতে পাই যে বুধ এবং নেপচুন মিশ্রিত হয়েছে, আমরা swap()পদ্ধতিটি ব্যবহার করে এই ভুলটি সংশোধন করতে পারি:

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystem = new ArrayList<>(Arrays.asList(neptune, venus, earth, mars
       , jupiter, saturn, uranus, mercury));// The planets are in the wrong order
       System.out.println(solarSystem);

       Collections.swap(solarSystem, solarSystem.indexOf(mercury), solarSystem.indexOf(neptune));
       System.out.println(solarSystem);

   }
}
swap()আমরা আমাদের তালিকার পদ্ধতি এবং দুটি উপাদানের সূচকগুলি যা অদলবদল করতে হবে তা পাস করি । উল্লেখ্য যে পদ্ধতিটি সূচকের সাথে কাজ করে, রেফারেন্স নয়। সুতরাং, এখানে আমাদের পদ্ধতিটি ব্যবহার করতে হয়েছিল ArrayList.indexOf()। আউটপুট: [নেপচুন, শুক্র, পৃথিবী, মঙ্গল, বৃহস্পতি, শনি, ইউরেনাস, বুধ] [বুধ, শুক্র, পৃথিবী, মঙ্গল, বৃহস্পতি, শনি, ইউরেনাস, নেপচুন] অবশেষে, আমরা একটি খুব আকর্ষণীয় পদ্ধতির সাথে পরিচিত হব: disjoint(). এটি দুটি সংগ্রহকে ছেদ করে কিনা তা পরীক্ষা করে, অর্থাৎ, তাদের অন্তত একটি অভিন্ন উপাদান আছে কিনা । যদি তারা তা না করে তবে এটি সত্য হয়ে যায়। এটা তারা, তারপর এটা মিথ্যা ফিরে

public class Main {

   public static void main(java.lang.String[] args) {

       String mercury = new String("Mercury");
       String venus = new String("Venus");
       String earth = new String("Earth");
       String mars = new String("Mars");
       String jupiter = new String("Jupiter");
       String saturn = new String("Saturn");
       String uranus = new String("Uranus");
       String neptune = new String("Neptune");

       ArrayList<String> solarSystemPart1 = new ArrayList<>(Arrays.asList(mercury, venus, earth, mars));
       ArrayList<String> solarSystemPart2 = new ArrayList<>(Arrays.asList(jupiter, saturn, uranus, neptune));

       System.out.println(Collections.disjoint(solarSystemPart1, solarSystemPart2));

   }
}
আপনি দেখতে পাচ্ছেন, আমাদের দুটি তালিকায় সম্পূর্ণ ভিন্ন উপাদান রয়েছে, তাই প্রোগ্রামটি সত্য । এটি একটি আকর্ষণীয় এবং খুব দরকারী ক্লাস। যেমন Arrays, এটি আমাদের জন্য অনেক রুটিন, ক্লান্তিকর কাজ করে, আমাদেরকে অন্যান্য বিষয়গুলিতে ফোকাস করতে দেয়।
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION