জাভাতে কি সেট করা আছে
আসুন সংক্ষেপে স্মরণ করি যে সেট ইন্টারফেস একটি সেট (সেট) সংজ্ঞায়িত করে। এটি সংগ্রহকে প্রসারিত করে এবং সদৃশ উপাদানের অনুমতি দেয় না এমন সংগ্রহের আচরণকে সংজ্ঞায়িত করে। সুতরাং, সেটে একটি ডুপ্লিকেট উপাদান যোগ করার চেষ্টা করা হলে 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() এই সেটের উপাদানের সংখ্যা প্রদান করে (এর উপাদানের সংখ্যা)।
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);
}
}
আউটপুট হল:
উদাহরণ 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);
}
}
প্রোগ্রামের আউটপুট এখানে:
উদাহরণ 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);
}
}
প্রোগ্রামের আউটপুট এখানে:
লিঙ্কডহ্যাশসেট বনাম হ্যাশসেট
এই দুই শ্রেণীর নিকটাত্মীয়। তবে হ্যাশসেটের ভিতরে এটি বস্তু সংরক্ষণ করার জন্য হ্যাশম্যাপ ব্যবহার করে যখন 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);
}
}
প্রোগ্রামের আউটপুট হল:
বাস্তব বিশ্বের অ্যাপ্লিকেশনে 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);
}
}
প্রোগ্রামের আউটপুট এখানে:
GO TO FULL VERSION