CodeGym /Java Blog /এলোমেলো /জাভাতে LinkedHashSet
John Squirrels
লেভেল 41
San Francisco

জাভাতে LinkedHashSet

এলোমেলো দলে প্রকাশিত
জাভাতে LinkedHashSet ক্লাসের কথা বলতে গেলে , আমাদের উল্লেখ করতে হবে যে এটি সেট ইন্টারফেস প্রয়োগ করে। LinkedHashSet একটি সংগ্রহ তৈরি করে যা একটি হ্যাশ টেবিলে উপাদান সংরক্ষণ করে কিন্তু তার HashSet প্রতিরূপের বিপরীতে উপাদানগুলির সন্নিবেশ ক্রম বজায় রাখে।

জাভাতে কি সেট করা আছে

আসুন সংক্ষেপে স্মরণ করি যে সেট ইন্টারফেস একটি সেট (সেট) সংজ্ঞায়িত করে। এটি সংগ্রহকে প্রসারিত করে এবং সদৃশ উপাদানের অনুমতি দেয় না এমন সংগ্রহের আচরণকে সংজ্ঞায়িত করে। সুতরাং, সেটে একটি ডুপ্লিকেট উপাদান যোগ করার চেষ্টা করা হলে add() পদ্ধতিটি মিথ্যা ফেরত দেয়। ইন্টারফেস তার নিজস্ব কোনো অতিরিক্ত পদ্ধতি সংজ্ঞায়িত করে না। সেট ইন্টারফেস সংরক্ষিত বস্তুর স্বতন্ত্রতার যত্ন নেয়, অনন্যতা সমান() পদ্ধতির বাস্তবায়ন দ্বারা নির্ধারিত হয়তাই, যদি তৈরি করা ক্লাসের অবজেক্ট সেট- এ যোগ করা হয় , তাহলে equals() মেথড ওভাররাইড করা বাঞ্ছনীয় ।

LinkedHashSet ক্লাস

LinkedHashSet ক্লাস সম্পর্কে কথা বলার আগে , আমাদের তার নিকটাত্মীয়, HashSet ক্লাস উল্লেখ করতে হবে। হ্যাশসেট সেট ইন্টারফেস প্রয়োগ করে । এটি একটি সংগ্রহ তৈরি করে যা উপাদানগুলিকে একটি হ্যাশ টেবিলে সংরক্ষণ করে। একটি হ্যাশ টেবিলের উপাদানগুলি কী-মান জোড়া হিসাবে সংরক্ষণ করা হয়। কী মান সঞ্চয় করার জন্য ঘর (বা সেগমেন্ট) নির্দিষ্ট করে। কী এর বিষয়বস্তু হ্যাশ কোড নামে একটি অনন্য মান নির্ধারণ করতে ব্যবহৃত হয়। আমরা একটি হ্যাশ কোডকে অবজেক্ট শনাক্তকারী হিসাবে ভাবতে পারি, যদিও এটি অনন্য হতে হবে না। এই হ্যাশ কোডটি একটি সূচক হিসাবেও কাজ করে যেখানে কী এর সাথে সম্পর্কিত ডেটা সংরক্ষণ করা হয়। LinkedHashSet Java ক্লাস কোন নতুন পদ্ধতি যোগ না করে HashSet প্রসারিত করে।LinkedHashSet আপনাকে HashSet এর মতই একটি এন্ট্রির অস্তিত্বের জন্য দ্রুত পরীক্ষা করার অনুমতি দেয় , কিন্তু ভিতরে একটি অর্ডার করা তালিকা রয়েছে। এর মানে হল যে এটি উপাদানগুলির সন্নিবেশ ক্রম সংরক্ষণ করে। অন্য কথায়, LinkedHashSet সেট উপাদানগুলির একটি লিঙ্ক তালিকা বজায় রাখে যে ক্রমে তারা সন্নিবেশ করা হয়েছিল। এটি একটি সেটে সন্নিবেশের আদেশকৃত পুনরাবৃত্তির অনুমতি দেয়। কিন্তু এর ফলে LinkedHashSet ক্লাস হ্যাশসেট ক্লাসের চেয়ে বেশি সময় ধরে অপারেশন করতে পারে ।

LinkedHashSet এর গুরুত্বপূর্ণ বৈশিষ্ট্য

  • আমরা শুধুমাত্র একটি LinkedHashSet এ অনন্য উপাদান সংরক্ষণ করতে পারি

  • LinketHashSet আসুন আমরা যে ক্রমে সন্নিবেশ করি সেই ক্রমে উপাদানগুলি বের করি

  • LinkedHashSet সিঙ্ক্রোনাইজ করা হয় না

  • LinkedHashSet নাল উপাদান সংরক্ষণের অনুমতি দেয়

  • LinkedHashSet একটি হ্যাশ কোডের উপর ভিত্তি করে একটি নির্দিষ্ট সূচকে উপাদানগুলি সংরক্ষণ করতে একটি হ্যাশিং কৌশল ব্যবহার করে

LinkedHashSet পদ্ধতি

এর প্যারেন্ট ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত পদ্ধতিগুলি ছাড়াও, হ্যাশসেট নিম্নলিখিত পদ্ধতিগুলিকে সংজ্ঞায়িত করে:
  • বুলিয়ান অ্যাড(অবজেক্ট o) এই সেটে নির্দিষ্ট উপাদান যোগ করে যদি এটি ইতিমধ্যে উপস্থিত না থাকে।

  • void clear() এই সেট থেকে সমস্ত উপাদান সরিয়ে দেয়।

  • অবজেক্ট ক্লোন() এই LinkedHashSet উদাহরণের একটি অগভীর অনুলিপি প্রদান করে: উপাদানগুলি নিজেরাই ক্লোন করা হয় না।

  • বুলিয়ান ধারণ করে (অবজেক্ট o) সত্য প্রদান করে যদি এই সেটটিতে নির্দিষ্ট উপাদান থাকে।

  • এই সেটে কোনো উপাদান না থাকলে বুলিয়ান isEmpty() true প্রদান করে ।

  • Iterator iterator() এই সেটের উপাদানগুলির উপর একটি পুনরাবৃত্তিকারী প্রদান করে।

  • বুলিয়ান রিমুভ (অবজেক্ট o) এই সেট থেকে নির্দিষ্ট উপাদান সরিয়ে দেয়, যদি উপস্থিত থাকে।

  • int size() এই সেটের উপাদানের সংখ্যা প্রদান করে (এর উপাদানের সংখ্যা)।

সহজ লিঙ্কডহ্যাশসেট উদাহরণ নীচের উদাহরণে আমরা লিঙ্কডহ্যাশসেট অবজেক্টের শুরু দেখাই এবং সেটটি পূরণ করতে add() পদ্ধতি ব্যবহার করি।

import java.util.LinkedHashSet;
import java.util.Set;

   public class LinkedHashSetEx1 {
       public static void main(String[] args) {
//LinkedHashSet() Init            
Set<String> set = new LinkedHashSet<>();
//adding elements to LinkedHashSet 
           set.add("Re"); //first added element 
           set.add("Do");
           set.add("Fa");
           set.add("Sol");
           set.add("La");
           set.add("Ti");
           set.add("Mi");//last added element  


           System.out.println(set);
       }
   }
আউটপুট হল:
[Re, Do, Fa, Sol, La, Ti, Mi]
আপনি দেখতে পাচ্ছেন, আমাদের সেটের উপাদানগুলি একই ক্রমে উপস্থিত হয়েছিল যা আমরা তাদের রেখেছি। জাভাতে LinkedHashSet - 1

উদাহরণ 2. LinkedHashSet-এ একটি ডুপ্লিকেট যোগ করা

আসুন আমাদের LinkedHashSet 7 উপাদানগুলিকে আবার বাদ্যযন্ত্রের স্কোরগুলির নাম দিয়ে রাখি এবং একটি নতুন উপাদান রাখি যা আগে রাখা উপাদানগুলির মতোই।

import java.util.LinkedHashSet;
import java.util.Set;

public class LinkedHashSetEx2 {
   public static void main(String[] args) {
           Set<String> set = new LinkedHashSet<>();
           set.add("Re");
           set.add("Do");
           set.add("Fa");
           set.add("Sol");
           set.add("La");
           set.add("Ti");
           set.add("Mi");
           set.add("Sol");
           System.out.println(set);
       }
   }
প্রোগ্রামের আউটপুট এখানে:
[Re, Do, Fa, Sol, La, Ti, Mi]
Example two-এর আউটপুট প্রথম উদাহরণের মতো হুবহু একই। LinkedHashSet সংগ্রহে আমাদের দুটি অনুরূপ উপাদান থাকতে পারে না । যখন আমরা দ্বিতীয়টি রাখার চেষ্টা করি, তখন এটি উপেক্ষা করা হয়।

উদাহরণ 3. LinkedHashSet থেকে উপাদান অপসারণ


import java.util.LinkedHashSet;
import java.util.Set;
   public class LinkedHashSet3 {
       public static void main(String[] args) {
           Set<String> set = new LinkedHashSet<>();
           set.add("Re");
           set.add("Do");
           set.add("Fa");
           set.add("Sol");
           set.add("La");
           set.add("Ti");
           set.add("Mi");
           System.out.println(set);
           set.remove("Fa");// removing an element from our set
           set.remove("Score");//trying to remove element that isn't in set
           System.out.println(set.remove("Score"));
           System.out.println("Print our set without elements removed: ");
           System.out.println(set);
           set.clear();
           System.out.println("Print out our set after clear command: ");
           System.out.println(set);
       }
   }
প্রোগ্রামের আউটপুট এখানে:
[Re, Do, Fa, Sol, La, Ti, Mi] মিথ্যা আমাদের সেট মুদ্রণ করুন উপাদানগুলি সরানো ছাড়াই: [Re, Do, Sol, La, Ti, Mi] স্পষ্ট নির্দেশের পরে আমাদের সেট মুদ্রণ করুন: []
আপনি দেখতে পাচ্ছেন, একটি অস্তিত্বহীন এলিমেন্টে প্রয়োগ করা রিমুভ() পদ্ধতির ফলে কোনো প্রোগ্রাম ত্রুটি হয় না। উপাদানটি সরানো না হলে এটি কেবল মিথ্যা ফেরত দেয় এবং যদি উপাদানটি লিঙ্কডহ্যাশসেটে থাকে এবং তারপর সরানো হয় তবে তা সত্য ।

লিঙ্কডহ্যাশসেট বনাম হ্যাশসেট

এই দুই শ্রেণীর নিকটাত্মীয়। তবে হ্যাশসেটের ভিতরে এটি বস্তু সংরক্ষণ করার জন্য হ্যাশম্যাপ ব্যবহার করে যখন LinkedHashSet LinkedHashMap ব্যবহার করে । আপনার যদি সন্নিবেশের ক্রম বজায় রাখার প্রয়োজন না হয় তবে অনন্য বস্তু সংরক্ষণ করার প্রয়োজন হয়, তাহলে হ্যাশসেট ব্যবহার করা আরও উপযুক্ত । আপনি যদি উপাদানগুলির সন্নিবেশের ক্রম বজায় রাখতে চান তবে LinkedHashSet আপনার পছন্দ। LinkedHashSet- এর কর্মক্ষমতা হ্যাশসেটের তুলনায় একটু ধীর কারণ LinkedHashSet উপাদানগুলির সন্নিবেশ ক্রম বজায় রাখতে অভ্যন্তরীণ LinkedList ব্যবহার করে। আসুন একটি উদাহরণ দেওয়া যাক:

import java.util.*;

public class LinkedHashSetExample1 {

   public static void main(String[] args) {
       // while regular hash set orders its elements according to its hashcode stamps

       Set<Integer> regularHashSet = new HashSet<>();
       regularHashSet.add(7);
       regularHashSet.add(3);
       regularHashSet.add(5);
       regularHashSet.add(65536);
       regularHashSet.add(9);
       // few duplicates
       regularHashSet.add(5);
       regularHashSet.add(7);

       // next will print:
       // > regularHashSet = [65536, 3, 5, 7, 9]
       System.out.println("regularHashSet = " + regularHashSet);

       // linked hash set keeps order of adding unchanged

       Set<Integer> linkedHashSet = new LinkedHashSet<>();
       linkedHashSet.add(7);
       linkedHashSet.add(3);
       linkedHashSet.add(5);
       linkedHashSet.add(65536);
       linkedHashSet.add(9);
       // few duplicates
       linkedHashSet.add(5);
       linkedHashSet.add(7);

       // next will print:
       // > linkedHashSet = [7, 3, 5, 65536, 9]
       System.out.println("linkedHashSet = " + linkedHashSet);
   }
}
প্রোগ্রামের আউটপুট হল:
নিয়মিত হ্যাশসেট = [65536, 3, 5, 7, 9] লিঙ্কযুক্ত হ্যাশসেট = [7, 3, 5, 65536, 9]

বাস্তব বিশ্বের অ্যাপ্লিকেশনে Java LinkedHashSet ব্যবহার করা

যেহেতু LinkedHashSet আপনাকে একটি এন্ট্রির অস্তিত্বের জন্য দ্রুত পরীক্ষা করতে দেয় এবং অর্ডার সঞ্চয় করে, তাই এই সংগ্রহটি একটি তালিকা থেকে সদৃশ বাদ দেওয়ার জন্য বেশ সুবিধাজনক বলে মনে হচ্ছে। অথবা, উদাহরণস্বরূপ, আমার ব্যাগে সর্বশেষ দেখা আইটেমের মতো সমস্যাগুলি সমাধান করা৷ নাকি, পোকেমন গো এরকম একটা খেলা মনে আছে? LinkedHashSet আপনার সম্মুখীন হওয়া পোকেমনের একটি তালিকা এবং সেগুলি আপনার পথে যে ক্রমানুসারে এসেছে তা সংরক্ষণ করতে পারে। এই ক্ষেত্রে, "পুনরাবৃত্ত" পোকেমন আর তালিকায় যোগ করা হবে না। অথবা, উদাহরণস্বরূপ, স্তর অনুসারে বসদের একটি তালিকা যা আপনি ইতিমধ্যে স্তর সহ যেকোনো গেমে পূরণ করেছেন। নাকি মহাজাগতিক দেহ আবিষ্কারের ইতিহাস। লিঙ্কডহ্যাশসেটএকটি স্পেস বডি ইতিমধ্যে তালিকায় আছে কিনা তা আপনাকে দ্রুত পরীক্ষা করার অনুমতি দেয় এবং যদি এটি সেখানে না থাকে তবে তালিকায় যোগ করুন। চলুন ডুপ্লিকেট নির্মূল করার একটি উদাহরণ নেওয়া যাক।

import java.util.*;

class LinkedHashSetExample2 {
   public static void main(String[] args) {
       List<String> listWithDuplicates = List.of("some","elements","with", "few", "duplicates", "were", "here", "duplicates", "duplicates");

       Set<String> linkedHashSet = new LinkedHashSet<>(listWithDuplicates);
       List<String> listWithoutDuplicates = new ArrayList<>(linkedHashSet);

       // next will print:
       // > listWithDuplicates = [some, elements, with, few, duplicates, here, duplicates, duplicates]
       System.out.println("listWithDuplicates = " + listWithDuplicates);
       // next will print:
       // > listWithoutDuplicates = [some, elements, with, few, duplicates, here]
       System.out.println("listWithoutDuplicates = " + listWithoutDuplicates);

       // -------------------------------------------------------------------------

       // while using regular Hash Set will generally produces some unexpected order
       Set<String> regularHashSet = new HashSet<>(listWithDuplicates);

       // next will print:
       // > linkedHashSet = [some, elements, with, few, duplicates, were, here]
       System.out.println("linkedHashSet = " + linkedHashSet);
       // next will print:
       // > regularHashSet = [here, some, with, duplicates, were, elements, few]
       System.out.println("regularHashSet = " + regularHashSet);
   }
}
প্রোগ্রামের আউটপুট এখানে:
listWithDuplicates = [কিছু, উপাদান, সঙ্গে, কয়েকটি, সদৃশ, ছিল, এখানে, সদৃশ, সদৃশ] listWithoutDuplicates = [কিছু, উপাদান, সঙ্গে, কয়েকটি, সদৃশ, ছিল, এখানে] linkedHashSet = [কিছু, উপাদান, সঙ্গে, কিছু, সদৃশ , were, here] regularHashSet = [এখানে, কিছু, সহ, সদৃশ, ছিল, উপাদান, কয়েকটি]
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION