CodeGym /Java Blog /এলোমেলো /জাভাতে ম্যাপ ইন্টারফেস
John Squirrels
লেভেল 41
San Francisco

জাভাতে ম্যাপ ইন্টারফেস

এলোমেলো দলে প্রকাশিত

জাভা ম্যাপ ইন্টারফেস কি?

জাভা ম্যাপ ইন্টারফেস জাভা কালেকশন ফ্রেমওয়ার্কের একটি অংশ, কিন্তু এটি কালেকশন ইন্টারফেসের একটি সাব-টাইপ নয়। সুতরাং এটি একটি ভিন্ন উপায়ে আচরণ করে, বলুন, তালিকা বা অন্যান্য সংগ্রহের বস্তুর তুলনায়। মানচিত্রের প্রতিটি উপাদান<কী, মান> একটি কী-মান জোড়া প্রতিনিধিত্ব করে। কী এবং মান উভয়ই কিছু বস্তু। একটি নির্দিষ্ট মানচিত্রের সমস্ত কী অনন্য, যদিও মানগুলি নয়, তাই সেগুলি সদৃশ হতে পারে। আপনি জাভাতে মানচিত্রের কথা ভাবতে পারেন যেমন এক ধরনের অভিধান বা অনলাইন-শপ ক্যাটালগ, যেখানে আপনি তার অনন্য সূচক ব্যবহার করে যেকোনো আইটেম খুঁজে পেতে পারেন। কীটি একটি মানচিত্রের মানটির একটি অনন্য শনাক্তকারী। উদাহরণস্বরূপ ম্যাপে<স্ট্রিং, আইটেম> স্ট্রিং হল অনলাইন শপ থেকে কিছু আইটেমের একটি আইডি। ডকুমেন্টেশন অনুসারে মানচিত্রের পরবর্তী সাবইন্টারফেস রয়েছে:
    বাঁধাই ;
  • সমবর্তী মানচিত্র<K,V> ;
  • ConcurrentNavigableMap<K,V> ;
  • লজিক্যাল মেসেজ প্রসঙ্গ ;
  • বার্তা প্রসঙ্গ ;
  • নেভিগেবল ম্যাপ<K,V> ;
  • SOAPMessageContext ;
  • সাজানো ম্যাপ<K,V>
এবং ক্লাস বাস্তবায়ন:
  • বিমূর্ত মানচিত্র
  • গুণাবলী
  • প্রমাণ প্রদানকারী
  • সমবর্তী হ্যাশম্যাপ
  • সমবর্তী স্কিপলিস্টম্যাপ
  • EnumMap
  • হ্যাশ মানচিত্র
  • হ্যাশ টেবিল
  • আইডেন্টিটি হ্যাশম্যাপ
  • লিঙ্কডহ্যাশম্যাপ
  • প্রিন্টারস্টেট কারণ
  • বৈশিষ্ট্য
  • প্রদানকারী
  • রেন্ডারিং ইঙ্গিত
  • সিম্পল বাইন্ডিং
  • TabularDataSupport
  • ট্রিম্যাপ
  • UID ডিফল্ট
  • WeakHashMap
  • Java AbstractMap হল একটি বিমূর্ত শ্রেণী যা মানচিত্র ইন্টারফেসের অধিকাংশ প্রয়োগ করে।
  • জাভা হ্যাশম্যাপ একটি হ্যাশ টেবিল ব্যবহার করে কী-মানের জোড়া সংরক্ষণ করার জন্য একটি ডেটা কাঠামো।
  • জাভা ট্রিম্যাপ হল একটি ট্রি ব্যবহার করার জন্য একটি ডেটা স্ট্রাকচার, অর্থাৎ সাজানো কী সহ প্রদর্শন।
  • দুর্বল কীগুলির সাথে একটি হ্যাশ টেবিল ব্যবহার করার জন্য WeakHashMap , মান সহ প্রদর্শন করুন যা আবর্জনা সংগ্রাহক মুছে ফেলতে পারে যদি সেগুলি আর ব্যবহার না করা হয়।
  • LinkedHashMap হল উপাদান যোগ করার ক্রম সহ একটি মানচিত্র, সন্নিবেশ ক্রমে পুনরাবৃত্তির অনুমতি দেয়।
  • EnumMap enum কীগুলির সাথে ব্যবহারের জন্য AbstractMap ক্লাস প্রসারিত করে ।
  • IdentityHashMap নথির তুলনা করার সময় রেফারেন্সিয়াল ইক্যুয়ালেন্স চেকিং ব্যবহার করে, সমান() পদ্ধতির পরিবর্তে == অপারেশন ব্যবহার করে তুলনা করে কী দিয়ে ম্যাপিং করে
এখানে আমরা মানচিত্র ইন্টারফেসের সর্বাধিক জনপ্রিয় বাস্তবায়নে আগ্রহী: হ্যাশম্যাপ, ট্রিম্যাপ এবং লিঙ্কডহ্যাশম্যাপ। যাইহোক, মানচিত্রের উপাদানগুলির ক্রম নির্দিষ্ট বাস্তবায়নের উপর নির্ভর করে। বলুন, ট্রিম্যাপ এবং লিঙ্কডহ্যাশম্যাপের উপাদানগুলির অনুমানযোগ্য ক্রম রয়েছে, যখন হ্যাশম্যাপে নেই।

মানচিত্র পদ্ধতি

যে কোনো মানচিত্রের প্রধান কাজ হল উপাদান সন্নিবেশ করা, অপসারণ করা এবং অনুসন্ধান করা।
  • পাবলিক অবজেক্ট পুট (অবজেক্ট কী, অবজেক্টের মান) মানচিত্রে একটি উপাদান সন্নিবেশ করায়।
  • public void putAll(মানচিত্র মানচিত্র) মানচিত্রের ভিতরে নির্দিষ্ট মানচিত্র সন্নিবেশ করায়।
  • পাবলিক অবজেক্ট রিমুভ (অবজেক্ট কী) নির্দিষ্ট কী অনুযায়ী একটি এন্ট্রি মুছে দেয়।
  • পাবলিক অবজেক্ট গেট(অবজেক্ট কী) নির্দিষ্ট কী-এর মান প্রদান করে।
  • পাবলিক বুলিয়ান ধারণ করে কী (অবজেক্ট কী) এই মানচিত্র থেকে নির্দিষ্ট কী অনুসন্ধান করে
  • public Set keySet() একটি সেট ভিউ প্রদান করে যাতে সমস্ত কী থাকে
  • public Set entrySet() সমস্ত কী এবং মান সহ একটি সেট ভিউ প্রদান করে।

হ্যাশম্যাপ কি

হ্যাশম্যাপ কি? এটি Map<Key,Value> ইন্টারফেসের সবচেয়ে জনপ্রিয় বাস্তবায়ন। এই তথ্য কাঠামো হ্যাশিং নীতির উপর ভিত্তি করে।

হ্যাশম্যাপ কাজের মূল নীতি: হ্যাশিং

হ্যাশম্যাপ কী এবং এটি কীভাবে কাজ করে তা বোঝার জন্য প্রথমে হ্যাশিং এবং হ্যাশ ফাংশন সম্পর্কে কথা বলা যাক। একটি হ্যাশ ফাংশন শুধুমাত্র একটি গাণিতিক অর্থে একটি ফাংশন. তাই কিছু ইনপুট মান রয়েছে (একটি বস্তু, ডেটার একটি অংশ) এবং ফাংশন একটি সঠিক নিয়ম ব্যবহার করে এটিকে আউটপুট মান - একটি হ্যাশ-এ রূপান্তর করে। প্রায়শই হ্যাশ একটি সঠিক দৈর্ঘ্যের হেক্সাডেসিমেল সংখ্যা। রূপান্তর প্রক্রিয়ার নিয়মগুলি ভিন্ন হতে পারে, তবে সেগুলি নিম্নলিখিত নীতিগুলির সাপেক্ষে:
  1. একটি নির্দিষ্ট ইনপুট (বস্তু) একটি নির্দিষ্ট হ্যাশ কোড আছে।
  2. যদি দুটি বস্তু সমান হয়, তাদের হ্যাশ কোডগুলিও সমান। বিপরীত সত্য নয়।
  3. হ্যাশ কোড ভিন্ন হলে, বস্তু অবশ্যই সমান নয়।
  4. কখনও কখনও বিভিন্ন বস্তুর একই হ্যাশ কোড থাকতে পারে। এটি একটি খুব অসম্ভাব্য ঘটনা, যার নাম "সংঘর্ষ" এবং একটি ভাল মানের হ্যাশ ফাংশন সংঘর্ষের সম্ভাবনাকে কমিয়ে দেয়৷
জাভাতে, প্রতিটি বস্তুর একটি হ্যাশ কোড আছে। এটি অবজেক্ট ক্লাসের হ্যাশকোড পদ্ধতি দ্বারা গণনা করা হয়, সমস্ত জাভা অবজেক্টের প্যারেন্টাল ক্লাস। সাধারণত, ডেভেলপাররা তাদের নিজস্ব ক্লাসের জন্য এই পদ্ধতিটিকে ওভাররাইড করে এবং এর সাথে সম্পর্কিত পদ্ধতির সমান করে ।

হ্যাশম্যাপ: এটি কিভাবে কাজ করে

সুতরাং ক্লাস HashMap<K,V> হিসাবে প্রতিটি মানচিত্র বাস্তবায়ন কী এবং মান নিয়ে গঠিত। এটি হ্যাশিং নীতি ব্যবহার করে কী সংরক্ষণ করে। হ্যাশম্যাপের ভিতরে কী-মান জোড়া "বালতি" তে সংরক্ষণ করা হয়, এই বালতিগুলি একসাথে একটি "টেবিল" তৈরি করে, সংযুক্ত তালিকাগুলির একটি অভ্যন্তরীণ অ্যারে এবং এর প্রাথমিক আকার হল 16. জাভাতে হ্যাশম্যাপ একটি বালতি নির্ধারণ করতে কী-এর হ্যাশকোড ব্যবহার করে যেখানে কী/মূল্যের জোড়া ম্যাপ করা উচিত: হ্যাশম্যাপের জটিল বৈশিষ্ট্য হল যে টেবিলের প্রতিটি সেল (বালতি) শুধুমাত্র একটি জোড়া নয় বরং একাধিক রাখে। এগুলি একটি স্পষ্ট বস্তু (যেমন লিঙ্কডলিস্ট) হিসাবে সংরক্ষণ করা হয় না, তবে একটি অন্তর্নিহিত চেইন হিসাবে। প্রতিটি জোড়া পরবর্তী জোড়ার একটি লিঙ্ক সঞ্চয় করার কারণে চেইনটি তৈরি করা হয়েছে। অর্থাৎ, সমস্ত HashMap জোড়া 16 টি চেইন জুড়ে ছড়িয়ে ছিটিয়ে আছে। আপনি যখন টেবিলে একটি নতুন জোড়া রাখেন, তখন কীটির হ্যাশ বিবেচনা করা হয়। এই হ্যাশটি কী অবজেক্টের মধ্যে তৈরি একটি হ্যাশকোড ফাংশন নয়। এটি 0-15 এর পরিসরে বিবেচিত হয়। জোড়াটি হ্যাশ সূচকের সাথে বালতিতে সংরক্ষিত জোড়ার শৃঙ্খলে যোগ করা হয়। এই পদ্ধতি আমাদের অনুসন্ধান ত্বরণ দেয়. চাবি দ্বারা একটি জোড়া অনুসন্ধান করার সময়, পুরো টেবিলের মধ্য দিয়ে যেতে হবে না। কীটির হ্যাশ বিবেচনা করা হয় এবং হ্যাশ সূচক সহ ঘরে সংরক্ষিত কেবল চেইনটি পরীক্ষা করা হয়। হ্যাশম্যাপে খুব বেশি জোড়া থাকলে চেইনগুলো অনেক লম্বা হয়ে যায়। তারপর অ্যারের আকার বৃদ্ধি পায়, সমস্ত সঞ্চিত বস্তুর হ্যাশ পুনরায় গণনা করা হয় এবং সেগুলি নতুন চেইন বরাবর ছড়িয়ে ছিটিয়ে থাকে।

হ্যাশম্যাপ ঘোষণা

আপনি যদি ক্লাস হ্যাশম্যাপ কোডে যান তবে আপনি পরবর্তী ঘোষণাটি পাবেন:

public class HashMap extends AbstractMap implements Map, Cloneable, Serializable
যেখানে K হল এই মানচিত্রের দ্বারা রক্ষণাবেক্ষণ করা কীগুলির ধরন এবং V - ম্যাপ করা মানগুলির ধরন৷ এটি আপনার কোডে পূর্ণসংখ্যা কী এবং স্ট্রিং মান সহ হ্যাশম্যাপ ঘোষণার একটি উদাহরণ:

HashMap<Integer, String> myHashMap = new HashMap<Integer, String>();

হ্যাশম্যাপ পদ্ধতি

এখানে হ্যাশম্যাপ পদ্ধতির তালিকা রয়েছে।
  • অবজেক্ট গেট (অবজেক্ট কী) নির্দিষ্ট কী-এর মান প্রদান করে;
  • অবজেক্ট পুট (কী k, মান v) ম্যাপে কী মান ম্যাপিং সন্নিবেশ করায়;
  • অবজেক্ট রিমুভ (অবজেক্ট কী) যদি উপস্থিত থাকে তবে এই মানচিত্র থেকে নির্দিষ্ট কীটির জন্য ম্যাপিং সরিয়ে দেয়;
  • void clear() হ্যাশম্যাপ থেকে সমস্ত কী-মান জোড়া সরিয়ে দেয়;
  • অবজেক্ট ক্লোন() কী এবং মান ক্লোন না করেই এই হ্যাশম্যাপ ইনস্ট্যান্সের একটি অগভীর অনুলিপি প্রদান করে;
  • বুলিয়ান containsKey(অবজেক্ট কী) মানচিত্রে নির্দিষ্ট কী পাওয়া গেলে সত্য প্রদান করে, যদি না থাকে তবে মিথ্যা;
  • বুলিয়ান containsValue(অবজেক্টের মান) মানচিত্রে নির্দিষ্ট কী পাওয়া গেলে সত্য প্রদান করে, যদি না থাকে তাহলে মিথ্যা;
  • বুলিয়ান isEmpty() মানচিত্র খালি থাকলে সত্য, না থাকলে মিথ্যা ফেরত দেয়;
  • সেট keySet() মানচিত্র থেকে আনা কীগুলির সেট ফেরত দেয়;
  • int size() কী-মান ম্যাপিংয়ের পরিমাণ প্রদান করে;
  • সংগ্রহের মান() মানচিত্রের মানগুলির একটি সংগ্রহ প্রদান করে;
  • অবজেক্ট রিমুভ (অবজেক্ট কী) নির্দিষ্ট কী-এর জন্য কী-মানের জোড়া সরিয়ে দেয়;
  • void putAll(মানচিত্র m) মানচিত্রের সমস্ত উপাদান অন্য মানচিত্রে অনুলিপি করে।

জাভা হ্যাশম্যাপের উদাহরণ

চলুন জাভা হ্যাশম্যাপ উদাহরণ সহ একটি প্রোগ্রাম তৈরি করি এটি কীভাবে কাজ করে তা প্রদর্শন করতে:

import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;
 
public class HashMap {
 
   public static void main(String[] args) {
 
       {
 
           // HashMap declaration
           HashMap<Integer, String> myHashMap = new HashMap<Integer, String>();
 
           //Adding elements into HashMap
           myHashMap.put(7, "Johnny");
           myHashMap.put(8, "Ivy");
           myHashMap.put(1, "Rick");
           myHashMap.put(4, "Stan");
           myHashMap.put(3, "Kyle");
 
           //print out the map content using Iterator
           Set set = myHashMap.entrySet();
           Iterator iterator = set.iterator();
           while (iterator.hasNext()) {
               Map.Entry mapEntry = (Map.Entry) iterator.next();
               System.out.print("key: " + mapEntry.getKey() + " value: ");
               System.out.println(mapEntry.getValue());
           }
           System.out.println("get an element from myHashMap via key and print the value out:");
           System.out.println(myHashMap.get(8));
           //print out hashMap on standard way:
           System.out.println(myHashMap);
 
           // Get values based on key
           String var = myHashMap.get(2);
           //here we'll get null, we don't have such a key
           System.out.println("Value with key 2: " + var);
           var = myHashMap.get(7);
           System.out.println("Value with key 7: " + var);
 
           // Remove values based on key
           myHashMap.remove(4);
           System.out.println("myHashMap after removing element:");
           System.out.println(myHashMap);
           myHashMap.clear();
           System.out.println("myHashMap after total clearing:");
           System.out.println(myHashMap);
       }
 
   }
}
প্রোগ্রাম চালানোর ফলাফল:

key: 1 value: Rick
key: 3 value: Kyle
key: 4 value: Stan
key: 7 value: Johnny
key: 8 value: Ivy
get an element from myHashMap via key and print the value out:
Ivy
{1=Rick, 3=Kyle, 4=Stan, 7=Johnny, 8=Ivy}
Value with key 2: null
Value with key 7: Johnny
myHashMap after removing element:
{1=Rick, 3=Kyle, 7=Johnny, 8=Ivy}
myHashMap after total clearing:
{}

ট্রিম্যাপ

জাভাতে TreeMap এছাড়াও Map<Key,Value> ইন্টারফেস প্রয়োগ করে, কিন্তু এটি লাল-কালো গাছের ডেটা কাঠামোর উপর ভিত্তি করে। একটি গাছ "নোড" এবং লাইন নিয়ে গঠিত যা নোড - শাখাগুলিকে সংযুক্ত করে৷ "মূল" নোডটি গাছের শীর্ষে থাকে৷ মূল থেকে, শাখা এবং নোড থাকতে পারে৷ এটি একটি শ্রেণিবদ্ধ কাঠামো, আপনি ভাবতে পারেন এই নোডগুলি মূলের "শিশু" হিসাবে। চাইল্ড নোডের নিজস্ব সন্তান থাকতে পারে - নিম্ন নোড। শিশুবিহীন নোডগুলিকে "এন্ড-নোড" বা "পাতা" বলা হয়। একটি বাইনারি ট্রি হল একটি গাছ, যেখানে প্রতিটি নোড শূন্য, একটি , বা দুটি শিশু। বাইনারি সার্চ ট্রি হল একটি কাঠামো, যেখানে প্রতিটি অভ্যন্তরীণ নোড একটি কী সংরক্ষণ করে, এবং কখনও কখনও একটি সম্পর্কিত মান, এবং দুটি বিশিষ্ট সাব-ট্রি ("বাম" এবং "ডান") রয়েছে। একটি স্ব-ভারসাম্যপূর্ণ বাইনারি অনুসন্ধান গাছ হল একটি নোড-ভিত্তিক বাইনারি অনুসন্ধান গাছ যা স্বয়ংক্রিয়ভাবে তার উচ্চতা (মূলের নীচে সর্বাধিক সংখ্যক স্তর) নির্বিচারে আইটেম সন্নিবেশ এবং মুছে ফেলার মুখে ছোট রাখে। একটি লাল-কালো গাছ বৈশিষ্ট্য সহ একটি সুষম বাইনারি গাছ:
  • প্রতিটি নোড হয় লাল বা কালো
  • মূল সবসময় কালো
  • প্রতিটি পাতা একটি NIL (খালি, শূন্য) নোড এবং এটি কালো
  • যদি একটি নোড লাল হয়, তবে এর বাচ্চারা অবশ্যই কালো।
  • একটি নোড থেকে একটি বংশধর পাতা পর্যন্ত প্রতিটি সহজ পথ একই সংখ্যক কালো নোড ধারণ করে।

একটি ট্রিম্যাপ বৈশিষ্ট্য

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

ট্রিম্যাপ পদ্ধতি

  • অবজেক্ট গেট (অবজেক্ট কী) সংশ্লিষ্ট কীটির মান প্রদান করে;
  • অবজেক্ট পুট (অবজেক্ট কী, অবজেক্টের মান) একটি মানচিত্রে একটি ম্যাপিং সন্নিবেশ করায়;
  • অবজেক্ট রিমুভ (অবজেক্ট কী) এই কীটির ম্যাপিং সরিয়ে দেয় যদি ট্রিম্যাপে এটি থাকে;
  • বুলিয়ান containsKey(অবজেক্ট কী) সত্য প্রদান করে যদি এই মানচিত্রে নির্দিষ্ট কী-এর জন্য একটি ম্যাপিং থাকে;
  • যদি ট্রিম্যাপ নির্দিষ্ট মানের সাথে এক বা একাধিক কী ম্যাপ করে তাহলে বুলিয়ান ধারণ করে (বস্তুর মান) সত্য হয়;
  • অবজেক্ট firstKey() বর্তমানে সাজানো মানচিত্রের প্রথম কীটি প্রদান করে;
  • অবজেক্ট lastKey() বর্তমানে সাজানো মানচিত্রের শেষ কীটি প্রদান করে;
  • void putAll(মানচিত্র মানচিত্র) নির্দিষ্ট মানচিত্র থেকে মানচিত্রে সমস্ত ম্যাপিং অনুলিপি করে;
  • সেট এন্ট্রিসেট() ম্যাপিংয়ের একটি সেট ভিউ প্রদান করে
  • int size() কী-মান ম্যাপিংয়ের পরিমাণ প্রদান করে
  • সংগ্রহের মান() মানগুলির একটি সংগ্রহের দৃশ্য প্রদান করে
  • অবজেক্ট ক্লোন() TreeMap এর একটি অগভীর অনুলিপি প্রদান করে
  • void clear() TreeMap থেকে সমস্ত ম্যাপিং সরিয়ে দেয়
  • SortedMap headMap(Object key_value) প্যারামিটার key_value থেকে কম মানচিত্রের অংশের একটি দৃশ্য প্রদান করে
  • সেট কীসেট() ট্রিম্যাপে থাকা কীগুলির একটি সেট ভিউ প্রদান করে
  • SortedMap সাবম্যাপ(K fromKey, K toKey) এই মানচিত্রের অংশের একটি দৃশ্য প্রদান করে যার কীগুলি থেকে কী, অন্তর্ভুক্ত, toKey, একচেটিয়া
  • অবজেক্ট firstKey() TreeMap থেকে প্রথম কী ফেরত দেয়।

TreeMap উদাহরণ


import java.util.TreeMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
 
public class TreeMapExample {
 
   public static void main(String args[]) {
 
       //TreeMap declaration
       TreeMap<Integer, String> myTreeMap = new TreeMap<Integer, String>();
 
       //put elements to TreeMap
       myTreeMap.put(1, "Stuart");
       myTreeMap.put(23, "Michael");
       myTreeMap.put(7, "Johnny");
       myTreeMap.put(5, "Ivy");
       myTreeMap.put(2, "Alex");
 
       //Display and print out myTreeMap using Iterator
       Set set = myTreeMap.entrySet();
       Iterator iterator = set.iterator();
       while (iterator.hasNext()) {
           Map.Entry myEntry = (Map.Entry) iterator.next();
           System.out.print("key: " + myEntry.getKey() + " value: ");
           System.out.println(myEntry.getValue());
       }
       //TreeMap printed in classical way
       System.out.println(myTreeMap);
       //removing an element with the key =2
       myTreeMap.remove(2);
       //myTreeMap after removing:
       System.out.println(myTreeMap);
   }
}
প্রোগ্রাম চালানোর ফলাফল:

key: 1 value: Stuart
key: 2 value: Alex
key: 5 value: Ivy
key: 7 value: Johnny
key: 23 value: Michael
{1=Stuart, 2=Alex, 5=Ivy, 7=Johnny, 23=Michael}
{1=Stuart, 5=Ivy, 7=Johnny, 23=Michael}

লিঙ্কডহ্যাশম্যাপ

LinkedHashMap হল একটি ডেটা স্ট্রাকচার যা লিঙ্ক করা তালিকা এবং হ্যাশ ম্যাপকে একত্রিত করে। প্রকৃতপক্ষে, লিঙ্কডহ্যাশম্যাপ হ্যাশম্যাপ ক্লাসকে প্রসারিত করে এবং মানচিত্র ইন্টারফেস প্রয়োগ করে, তবে লিঙ্কযুক্ত তালিকা সম্পর্কে এটি কী? লিঙ্কডহ্যাশম্যাপের ঘোষণা:

Map <Integer, String> linkedHashMap = new LinkedHashMap <Integer, String>();
এই নতুন লিঙ্কডহ্যাশম্যাপ হ্যাশম্যাপ (যেমন টেবিল, লোডফ্যাক্টর, থ্রেশহোল্ড, আকার, এন্ট্রিসেট) থেকে বৈশিষ্ট্যগুলি উত্তরাধিকারসূত্রে পেয়েছে, এছাড়াও দুটি বিশেষ বৈশিষ্ট্য পায়:
  • হেডার একটি দ্বিগুণ লিঙ্কযুক্ত তালিকার প্রধান। আরম্ভ করার সময়, এটি নিজেই নির্দেশ করে
  • অ্যাক্সেসঅর্ডার নির্দেশ করে কিভাবে ইটারেটর ব্যবহার করে উপাদানগুলিতে অ্যাক্সেস পেতে হয়। সত্য হলে, শেষ অ্যাক্সেসের ক্রমে। মিথ্যা হলে, উপাদানগুলি যে ক্রমে ঢোকানো হয়েছিল সেই ক্রমে অ্যাক্সেস হবে৷
এই লিঙ্কযুক্ত তালিকাটি পুনরাবৃত্তি ক্রম সংজ্ঞায়িত করে। সাধারণত, এটি মানচিত্রে কী সন্নিবেশের ক্রম।

লিঙ্কডহ্যাশম্যাপ পদ্ধতি

  • অবজেক্ট গেট(অবজেক্ট কী) নির্দিষ্ট কী ম্যাপ করা হয়েছে এমন মান প্রদান করে, অথবা যদি এই মানচিত্রে কীটির জন্য কোনো ম্যাপিং না থাকে তাহলে শূন্য
  • void clear() মানচিত্র থেকে সমস্ত ম্যাপিং সরিয়ে দেয়।
  • নির্দিষ্ট উপাদান এক বা একাধিক কী দ্বারা ম্যাপ করা হলে বুলিয়ান containsKey(অবজেক্ট কী) সত্য ফেরত দেয়
  • বুলিয়ান রিমুভ এল্ডেস্ট এন্ট্রি(ম্যাপ. এন্ট্রি জ্যেষ্ঠ) সত্য ফেরত দেয় যদি মানচিত্রটি মানচিত্র থেকে তার সবচেয়ে বড় এন্ট্রি সরিয়ে দেয়
  • Set<Map.Entry<K,V>> entrySet() এই মানচিত্রে থাকা ম্যাপিংগুলির একটি সেট দৃশ্য প্রদান করে
  • void forEach(BiConsumer<? super K,? super V> action) এই মানচিত্রে প্রতিটি এন্ট্রির জন্য প্রদত্ত ক্রিয়া সম্পাদন করে যতক্ষণ না সমস্ত এন্ট্রি প্রক্রিয়া করা হয় বা ক্রিয়াটি ব্যতিক্রম না করে।
  • অবজেক্ট getOrDefault(Object key, V defaultValue) নির্দিষ্ট কী ম্যাপ করা হয়েছে এমন মান প্রদান করে। যদি মানচিত্রে কী-এর জন্য একটি ম্যাপিং না থাকে, তাহলে ডিফল্ট মান প্রদান করে।
  • Set<K> keySet() মানচিত্রে থাকা কীগুলির একটি সেট ভিউ প্রদান করে
  • বুলিয়ান রিমুভএল্ডেস্ট এন্ট্রি(ম্যাপ.এন্ট্রি<কে,ভি> জ্যেষ্ঠ) সত্য ফেরত দেয় যদি এই মানচিত্রটি তার সবচেয়ে বড় এন্ট্রিটি সরিয়ে দেয়
  • void replaceAll(BiFunction<? super K,? super V,? extensions V> function) প্রতিটি এন্ট্রি মান প্রতিস্থাপন করে সেই এন্ট্রিতে প্রদত্ত ফাংশন আহ্বান করার ফলাফলের সাথে যতক্ষণ না সমস্ত এন্ট্রি প্রক্রিয়া করা হয় বা ফাংশনটি একটি ব্যতিক্রম থ্রো করে।
  • সংগ্রহ<v>মান() মানচিত্রে থাকা মানগুলির একটি সংগ্রহ দৃশ্য প্রদান করে

LinkedHashMap উদাহরণ


import java.util.LinkedHashMap;
import java.util.Set;
import java.util.Iterator;
import java.util.Map;
   public class HashLinkedListExample {
       public static void main(String args[]) {
           // LinkedHashMap Declaration
           LinkedHashMap<Integer, String> myLinkedHashMap =
                   new LinkedHashMap<Integer, String>();
 
           //Adding elements into LinkedHashMap
           myLinkedHashMap.put(7, "Johnny");
           myLinkedHashMap.put(12, "Rick");
           myLinkedHashMap.put(1, "Kyle");
           myLinkedHashMap.put(5, "Percy");
           myLinkedHashMap.put(85, "Sebastian");
 
           // Generate a Set of entries
           Set set = myLinkedHashMap.entrySet();
 
           // Display and print out the nodes  of LinkedHashMap
           Iterator iterator = set.iterator();
           while(iterator.hasNext()) {
               Map.Entry me = (Map.Entry)iterator.next();
               System.out.print("key: "+ me.getKey() +
                       " value: "+me.getValue()+"\n");
           }
           //print out HashLinkedMap on standard way:
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(21, "Ivy");
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.remove(12);
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(12, "Ronny");
           System.out.println(myLinkedHashMap);
           myLinkedHashMap.put(1, "Stan");
           System.out.println(myLinkedHashMap);
       }
   }
এখানে আমরা পাঁচটি উপাদান যোগ করে একটি নতুন LinkedHashMap তৈরি করি, তারপর এটিকে ইটারেটর ব্যবহার করে এবং একটি ক্লাসিক্যাল উপায়ে প্রিন্ট আউট করি। আপনি দেখতে পাচ্ছেন, LinkedHashMap সন্নিবেশ ক্রম বজায় রাখে। এর পরে আমরা আমাদের মানচিত্র থেকে একটি উপাদান মুছে ফেলি, তারপরে নতুনটি যোগ করি এবং পরে - কী সহ আরও একটি উপাদান, যা ইতিমধ্যে মানচিত্রে রয়েছে। এটি এই কীতে ম্যাপ করা পুরানো মান প্রতিস্থাপন করে। চলমান প্রোগ্রামের ফলাফল:

key: 7 value: Johnny
key: 12 value: Rick
key: 1 value: Kyle
key: 5 value: Percy
key: 85 value: Sebastian
{7=Johnny, 12=Rick, 1=Kyle, 5=Percy, 85=Sebastian}
{7=Johnny, 12=Rick, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy}
{7=Johnny, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy}
{7=Johnny, 1=Kyle, 5=Percy, 85=Sebastian, 21=Ivy, 12=Ronny}
{7=Johnny, 1=Stan, 5=Percy, 85=Sebastian, 21=Ivy, 12=Ronny}

হ্যাশম্যাপ, ট্রিম্যাপ, লিঙ্কডহ্যাশম্যাপ তুলনা

হ্যাশম্যাপ, ট্রিম্যাপ এবং লিঙ্কডহ্যাশম্যাপ হল ম্যাপ ইন্টারফেসের বাস্তবায়ন। হ্যাশম্যাপ এবং লিঙ্কডহ্যাশম্যাপ হল ডেটা স্ট্রাকচার যা হ্যাশ কী। TreeMap একটি অনুসন্ধান গাছ সংগঠিত করার জন্য এর কীগুলির স্বাভাবিক ক্রম ব্যবহার করে। আদেশ:
  • হ্যাশম্যাপ কোন অর্ডার বজায় রাখে না।
  • TreeMap কীগুলির ক্রমবর্ধমান ক্রম অনুসারে এন্ট্রিগুলিকে সাজায়।
  • LinkedHashMap সন্নিবেশ ক্রম বজায় রাখে।
নাল কী:
  • HashMap এবং LinkedHashMap একটি নাল কী থাকার অনুমতি দেয়।
  • লিঙ্কডহ্যাশম্যাপ নাল কীগুলিকে অনুমতি দেয় না যদি কীগুলি প্রাকৃতিক ক্রম ব্যবহার করে বা তুলনাকারী নাল লীতে তুলনা সমর্থন করে না৷
আসুন একটি জাভা মানচিত্রের উদাহরণ দেওয়া যাক যা এই নিবন্ধে পর্যালোচনা করা তিনটি বাস্তবায়ন অন্তর্ভুক্ত করে:

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.TreeMap;
 
public class CompMapImpl {
 
 
    public static void main(String[] args) {
        HashMap<Integer, String> hashMap = new HashMap<>();
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        LinkedHashMap<Integer, String> linkedHashMap = new LinkedHashMap<>();
        hashMap.put(5, "Ivy");
        hashMap.put(null, "Joker");
        hashMap.put(1, "First");
        hashMap.put(2, "Kyle");
        hashMap.put(-2, "Paul");
        hashMap.put(3, "Sandy");
 
 
        treeMap.put(5, "Ivy");
        //treeMap.put(null,"Joker");
        treeMap.put(1, "First");
        treeMap.put(2, "Kyle");
        treeMap.put(-2, "Paul");
        treeMap.put(3, "Sandy");
 
        linkedHashMap.put(5, "Ivy");
        linkedHashMap.put(null, "Joker");
        linkedHashMap.put(1, "First");
        linkedHashMap.put(2, "Kyle");
        linkedHashMap.put(-2, "Paul");
        linkedHashMap.put(3, "Sandy");
        System.out.println("HashMap");
        System.out.println(hashMap);
        System.out.println("TreeMap");
        System.out.println(treeMap);
        System.out.println("LinkedHashMap");
        System.out.println(linkedHashMap);
 
 
        LinkedHashMap<String, String> linkedHashMap1= new LinkedHashMap<> ();
        linkedHashMap1.put(null, "Andy");
        System.out.println(linkedHashMap1);
    }
}
এই প্রোগ্রামটি চালানোর ফলাফল এখানে:

HashMap
{null=Joker, 1=First, -2=Paul, 2=Kyle, 3=Sandy, 5=Ivy}
TreeMap
{-2=Paul, 1=First, 2=Kyle, 3=Sandy, 5=Ivy}
LinkedHashMap
{5=Ivy, null=Joker, 1=First, 2=Kyle, -2=Paul, 3=Sandy}
{null=Andy}
আমরা দেখতে পাচ্ছি, হ্যাশম্যাপে উপাদানগুলির ক্রম স্পষ্ট নয়, ট্রিম্যাপে এটি কীগুলির উপর নির্ভর করে, লিঙ্কডহ্যাশম্যাপে এটি সন্নিবেশের ক্রম সম্পর্কে। যদি আমরা লিঙ্কডহ্যাশম্যাপে নাল কী রাখার চেষ্টা করি, আমরা NullPointerException পাব, কিন্তু লিঙ্কডহ্যাশম্যাপ1-এ, যেখানে কীগুলি স্ট্রিং, আমরা এটি করতে পারি। একটি হ্যাশ মানচিত্র হল সর্বোত্তম সাধারণ-উদ্দেশ্য মানচিত্র বাস্তবায়ন। এটি সর্বাধিক অনুসন্ধান গতি, দ্রুত সঞ্চয়স্থান এবং পুনরুদ্ধারের ক্রিয়াকলাপ প্রদান করে, তবে আপনাকে এর বিশৃঙ্খল ক্রম সম্পর্কে মনে রাখতে হবে। একটি লিঙ্কযুক্ত হ্যাশ ম্যাপ হ্যাশম্যাপ সুবিধাগুলিকে উত্তরাধিকার সূত্রে পায় এবং কীগুলির জন্য একটি অর্ডার পায়৷ যাইহোক, এতে লিঙ্কডলিস্ট রয়েছে, যা মেমরির দিক থেকে তুলনামূলকভাবে ব্যয়বহুল। এটি অনুসন্ধানে হ্যাশম্যাপের চেয়ে ধীর এবং লিঙ্কযুক্ত তালিকা বজায় রাখার কারণে যোগ/সরানোর জন্য কিছুটা ধীর। একটি গাছের মানচিত্র ঊর্ধ্বক্রমানুসারে বাছাই করা কী সংরক্ষণ করে। যাহোক, আপনি যা শিখেছেন তা শক্তিশালী করার জন্য, আমরা আপনাকে আমাদের জাভা কোর্স থেকে একটি ভিডিও পাঠ দেখার পরামর্শ দিই
মন্তব্য
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION