1. কী-মান জোড়ার একটি সেট।

কী-মানের জোড়ার একটি সেট

জাভাতে, আরেকটি আকর্ষণীয় সংগ্রহ (বিস্তৃতভাবে বলতে গেলে) হল Map। কখনও কখনও এই ডেটা কাঠামোকে অভিধানও বলা হয়।

এটি সংগ্রহের অনুরূপ Set, তবে এটি উপাদানগুলির একটি সেটের পরিবর্তে উপাদানগুলির "জোড়া"গুলির একটি সেট সংরক্ষণ করে, প্রতিটি জোড়া Mapদুটি উপাদান নিয়ে গঠিত: একটি "কী" এবং একটি "মান"।

ধরা যাক আপনি আপনার প্রোগ্রামে কর্মচারীর নাম এবং তাদের বেতন, বা আপনার সহকর্মীদের নাম এবং তাদের বয়স সংরক্ষণ করতে চান। তারপর আপনার এই মত একটি টেবিল প্রয়োজন হবে:

নাম বয়স
ইলন 21
জেফ 22
বিল 48
ওয়ারেন ?

প্রতিটি সারিতে কয়েকটি মান রয়েছে। আমরা নামটিকে জোড়ার কী হিসাবে উল্লেখ করব , এবং বয়সকে জোড়ার মান হিসাবে উল্লেখ করব ।

এই জোড়ার পুরো সেটটি আমাদের মানচিত্র ( Map)।

একটি জোড়ার চাবি ছাড়া অন্য কিছু হতে পারে null। কীগুলি অবশ্যই অনন্য হতে হবে: একটি মানচিত্রে দুটি অভিন্ন কী থাকতে পারে না৷


2. HashMapক্লাস

ক্লাস HashMapহল সবচেয়ে জনপ্রিয় ধরনের Mapসংগ্রহ। একদিকে, এটি হ্যাশসেটের অনুরূপ এবং এর সমস্ত পদ্ধতি রয়েছে। অন্যদিকে, এটি একটি তালিকা ( ArrayList) এর মত যা শব্দ (বা অন্য কিছু) এর সূচক হিসাবে ব্যবহার করতে পারে।

HashMapআপনি এই মত একটি বিবৃতি ব্যবহার করে তৈরি করতে পারেন :

HashMap<KeyType, ValueType> name = new HashMap<KeyType, ValueType>();

KeyTypeসংরক্ষিত জোড়ার কীগুলির ধরন কোথায় এবং ValueTypeসংগ্রহে সংরক্ষিত জোড়ার মানগুলির ধরন HashMap

ক্লাসের HashMapএই মত পদ্ধতি আছে:

পদ্ধতি বর্ণনা
void put(KeyType key, ValueType value)
সংগ্রহে ( key, ) জোড়া যোগ করেvalue
ValueType get(KeyType key)
একটি কী এর সাথে সম্পর্কিত মান প্রদান করে।
boolean containsKey(KeyType key)
সংগ্রহে একটি কী বিদ্যমান কিনা তা পরীক্ষা করে
boolean containsValue(ValueType value)
সংগ্রহে একটি মানের অস্তিত্বের জন্য পরীক্ষা করে
ValueType remove(KeyType key)
সংগ্রহ থেকে একটি উপাদান সরান
void clear()
সংগ্রহ সাফ, সমস্ত উপাদান অপসারণ
int size()
সংগ্রহে কী-মান জোড়ার সংখ্যা প্রদান করে
Set<KeyType> keySet()
সংগ্রহে থাকা কীগুলির সেট ফেরত দেয়
Collection<ValueType> values()
সংগ্রহের উপাদান সমন্বিত একটি সেট প্রদান করে
Set<Map.Entry<KeyType, ValueType>> entrySet()
সংগ্রহে থাকা Setসমস্ত জোড়ার ( ) একটি সেট ( ) প্রদান করে ।Map.Entry

একটি উপাদান যোগ করাHashMap

উপাদানগুলিকে একটি মানচিত্রে জোড়া হিসাবে যোগ করা হয় put()পদ্ধতি ব্যবহার করে। কীটি প্রথম আর্গুমেন্ট হিসাবে পাস করা হয় এবং মানটি দ্বিতীয় হিসাবে পাস করা হয়।

HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);

একটি কী-মান জোড়া যোগ করার সময়, যদি সংগ্রহে কীটি ইতিমধ্যেই বিদ্যমান থাকে, তাহলে পুরানো মানটি নতুন মান দ্বারা প্রতিস্থাপিত হয়।

এই আচরণটি একটি অ্যারে বা একটি তালিকার মতো করে যার সূচকগুলি সংখ্যার পরিবর্তে HashMapশব্দ ( )।String

গুরুত্বপূর্ণ:

প্রায় যেকোন প্রকার কি-টাইপ বা ভ্যালু টাইপ হতে পারে। KeyType-এর জন্য কিছু ছোট অতিরিক্ত প্রয়োজনীয়তা রয়েছে, এবং আপনি জাভা কালেকশন কোয়েস্টে সংগ্রহগুলি আরও বিশদভাবে অধ্যয়ন করলে আপনি সেগুলি সম্পর্কে জানতে পারবেন।



3. a-এর উপসেট HashMap: কীগুলির সেট

ধরা যাক আমরা স্ক্রিনে সব এন্ট্রি প্রদর্শন করতে চাই HashMap। আমরা এটা কিভাবে করব? এটি করার জন্য, আমাদের জানতে হবে কীভাবে সমস্ত এন্ট্রিগুলির মধ্য দিয়ে যেতে হবে HashMap। এটা বিভিন্নভাবে করা সম্ভব।

সবচেয়ে সহজ উপায় হল কীগুলি লুপ করা

HashMapএন্ট্রিগুলি ক্রমানুসারে সংখ্যায়িত হয় না, তাই কাউন্টার সহ একটি লুপ এখানে কাজ করবে না। কিন্তু আমরা পদ্ধতিটি ব্যবহার করে কীগুলির একটি সেট পেতে পারি keySet()এবং আপনি ইতিমধ্যেই জানেন কিভাবে একটি সেটের উপর পুনরাবৃত্তি করতে হয়:

কোড বর্ণনা
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);

for (String key: map.keySet())
{
   Integer value = map.get(key);
   System.out.println(key + " --> " + value);
}






map

কী এর সাথে যুক্ত মান পান এর কীগুলির উপর লুপ করুন

পদ্ধতিটি keySet()কীগুলির একটি সেট প্রদান করে। আপনি এই সেট দুটি উপায়ে ব্যবহার করতে পারেন:

কম্প্যাক্ট স্বরলিপি দীর্ঘ স্বরলিপি
for (String key: map.keySet())
{
   Integer value = map.get(key);
   System.out.println(key + " --> " + value);
}
Set<String> keys = map.keySet();

for (String key: keys)
{
   Integer value = map.get(key);
   System.out.println(key + " --> " + value);
}


4. কী-মান জোড়ার উপর লুপিং

আরও একটি জটিল উপায় রয়েছে: আপনি একটিকে কী-মান জোড়ার সেটেMap রূপান্তর করতে পারেন এবং তারপর সেটের উপাদানগুলি লুপ করতে পারেন, যেমনটি আমরা ইতিমধ্যে শিখেছি।

সংগ্রহে HashMapএকটি সহায়ক শ্রেণী রয়েছে যা একটি মূল-মান জোড়া সঞ্চয় করে। এটি প্রায় এই মত দেখায়:

class Entry<KeyType, ValueType>
{
   private KeyType key;
   private ValueType value;

   public KeyType getKey()
   {
      return this.key;
   }

   public ValueType getValue()
   {
      return this.value;
   }
}

entrySet()একটি বস্তুর উপর পদ্ধতি কল করার ফলাফল হবে একটি :HashMap<KeyType, ValueType>Set<Entry<KeyType, ValueType>>

Set<Entry<KeyType, ValueType>> name = map.entrySet();

এখানে আমাদের একটি টাইপ প্যারামিটার সহ জেনেরিক Setক্লাস রয়েছে, যা ফলস্বরূপ একটি জেনেরিক টাইপ ( Entry) দুই ধরনের পরামিতি সহ।

একজন শিক্ষানবিশের পক্ষে এই বিষয়ে বিভ্রান্ত হওয়া খুব সহজ। কিন্তু একবার আপনি এটি খুঁজে বের করার পরে, আপনি কোড লিখতে পারেন:

HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("Elon", 21);
map.put("Jeff", 22);
map.put("Bill", 48);
map.put("Warren", null);

Set<Map.Entry<String, Integer>> entries = map.entrySet();
for(Map.Entry<String, Integer> pair: entries)
{
   String key = pair.getKey();
   Integer value = pair.getValue();
   System.out.println(key + " --> " + value);
}

এটি বলেছিল, এই কোডটি একটু সরলীকৃত করা যেতে পারে:

প্রথমে, আপনি একটি পৃথক ভেরিয়েবল তৈরি করা এড়িয়ে যেতে পারেন entriesএবং পরিবর্তে entrySet()সরাসরি লুপের ভিতরে পদ্ধতিটি কল করতে পারেন for:

for(Map.Entry<String, Integer> pair: map.entrySet())
{
   String key = pair.getKey();
   Integer value = pair.getValue();
   System.out.println(key + " --> " + value);
}

দ্বিতীয়ত, আপনি স্বয়ংক্রিয়ভাবে কী-মান জোড়ারvar ধরন অনুমান করতে সম্প্রতি প্রবর্তিত অপারেটর ব্যবহার করতে পারেন :

for(var pair: map.entrySet())
{
   String key = pair.getKey();
   Integer value = pair.getValue();
   System.out.println(key + " --> " + value);
}

খারাপ না, তাই না?



5. ArrayListএবং এর তুলনাHashMap

A HashMapদৃঢ়ভাবে একটি অনুরূপ ArrayListযা স্ট্রিং (বা অন্যান্য প্রকার) সূচী (কী) হিসাবে ব্যবহার করার অনুমতি দেয়।

যদি আপনি Integera-তে কীগুলির জন্য ব্যবহার করেন HashMap, তাহলে এটি আরও বেশি অনুরূপ হয়ে যায় ArrayList। আসুন তুলনা করা যাক:

ArrayList<String> সহ কোড HashMap<Integer, String> সহ কোড
ArrayList<String> list = new ArrayList<String>();

list.add("Greetings");
list.add("Hello");

String s = list.get(0);
list.set(0, s + "!");

for (String item: list)
{
   System.out.println(item);
}
HashMap<Integer, String> map = new HashMap<Integer, String>();

map.put(0, "Greetings");
map.put(1, "Hello");

String s = map.get(0);
map.put(0, s + "!");

for (String item: map.values())
{
   System.out.println(item);
}