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



হ্যাশ মানচিত্র জাভা জাভা মানচিত্র

জাভাতে হ্যাশম্যাপ ক্লাস তথ্য আকারে সঞ্চয় করে প্রকৃত মূল্য জোড়া যেখানে মূল ডেটাটি অনন্য হওয়া উচিত। আমরা সংশ্লিষ্ট কী ডেটার উপর ভিত্তি করে মানগুলি অ্যাক্সেস করতে পারি। হাশম্যাপ জাভা সংগ্রহের কাঠামোতে উপস্থিত এবং java.util প্যাকেজের অংশ। এটি হ্যাশিং কৌশলটির নীতিতে কাজ করে।

জাভা হ্যাশম্যাপ হায়ারার্কি

জাভাতে হ্যাশম্যাপ ক্লাসটি প্রসারিত করে বিমূর্ত শ্রেণী অ্যাবস্ট্রাক ম্যাপ এবং প্রয়োগ করে মানচিত্র ইন্টারফেস নীচে প্রদর্শিত হিসাবে।

জাভায় হ্যাশম্যাপ

হ্যাশম্যাপ কাঠামো এবং কার্য নীতি

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

জাভায় হ্যাশম্যাপ

হ্যাশম্যাপ পারফরম্যান্স

জাভাতে হ্যাশম্যাপের পারফরম্যান্স নীচের প্যারামিটারগুলির উপর নির্ভর করে:

  • প্রাথমিক ক্যাপাসিটি - এটি হ্যাশম্যাপ শুরু হওয়ার সময় কতগুলি বালতি সঞ্চয় করতে পারে তা বোঝায়। ডিফল্টরূপে, এটি হয় 16 কী-মান জোড়া
  • লোড ফ্যাক্টর - এটি যে পরিমাণের বৃদ্ধি করতে হবে তার শতাংশের শতাংশ এটি। ডিফল্টরূপে, এটি হয় 0.75
  • থ্রেশহোল্ড - এটি লোড ফ্যাক্টর এবং দক্ষতার পণ্য, যার ডিফল্ট মান 12 (16 * 0.75)
  • পুনঃভাগ করা - এটি একটি দক্ষতার দ্বারপ্রান্তে পৌঁছানোর পরে ক্ষমতা দ্বিগুণ করার প্রক্রিয়া।

জাভা হ্যাশম্যাপের ঘোষণা

জাভাতে হ্যাশম্যাপ ব্যবহার করতে আমাদের আমদানি করা দরকার java.util.HashMap প্যাকেজ সিনট্যাক্সটি নীচে দেওয়া হয়েছে:

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

চাবির ধরন - এটি মূল ডেটার ধরণ.Eg: স্ট্রিং বা পূর্ণসংখ্যা

ভ্যালু টাইপ - এটি মান ডেটার ধরণ। যেমন: স্ট্রিং বা পূর্ণসংখ্যা

হ্যাশম্যাপ বৈশিষ্ট্য

নীচে জাভায় হ্যাশম্যাপের বৈশিষ্ট্যগুলি রয়েছে:

  • স্টোর প্রতিটি কী অনুরূপ মান
  • শুধুমাত্র অনন্য কী রয়েছে
  • সদৃশ কীগুলিকে অনুমতি দেয় না তবে সদৃশ মান থাকতে পারে
  • এটি কোনও অর্ডার বজায় রাখে না যার অর্থ ডেটা theোকানো ক্রমের অর্থ এটি পুনরুদ্ধার করা আদেশের মতো নয়।
  • এটি অ-সিঙ্ক্রোনাইজড

জাভা হ্যাশম্যাপ ক্লাস কনস্ট্রাক্টর

আপনি নীচের সারণিতে দেখতে পাচ্ছেন হ্যাশম্যাপ 4 টি ভিন্ন নির্মাতাকে সমর্থন করে:

রচয়িতাবিবরণ
হ্যাশ মানচিত্র()একটি ডিফল্ট হ্যাশম্যাপ শুরু করে
হ্যাশম্যাপ (ম্যাপম)ম্যাপ মি এর উপাদানগুলির সাথে হাশম্যাপের সূচনা করে
হ্যাশম্যাপ (ইনট ক্ষমতা)নির্দিষ্ট ক্ষমতা পূর্ণসংখ্যার মান সহ হ্যাশম্যাপ শুরু করে
হ্যাশম্যাপ (ইনট ক্ষমতা, ফ্লোট লোডফ্যাক্টর)নির্দিষ্ট ক্ষমতা এবং লোডফ্যাক্টর দিয়ে হ্যাশম্যাপ শুরু করে

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

জাভা হ্যাশম্যাপ নীচের সারণিতে উল্লিখিত পদ্ধতিগুলির সাথে মানচিত্র ইন্টারফেসের সাথে সম্পর্কিত সমস্ত পদ্ধতি সমর্থন করে

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

হ্যাশম্যাপ ব্যতিক্রম

এটি জাভাতে নীচের ব্যতিক্রমগুলি ছুঁড়ে দেয়:

  • সমসাময়িক পদ্ধতি পরিবর্তন
  • অবৈধমনিস্টার স্টেটএক্সসেপশন
  • নাল পয়েন্টার ব্যতিক্রম
  • বাধাপ্রাপ্তি
  • অবৈধআর্গুমেন্টইসেপশন

হ্যাশম্যাপে উপাদান যুক্ত করা হচ্ছে

আপনি নীচের উদাহরণে দেখতে পাচ্ছেন, প্রথমে আমরা স্ট্রিং টাইপের কী এবং পূর্ণসংখ্যার ধরণের মান সহ 'ছাত্র' নামে একটি হ্যাশম্যাপ তৈরি করি। তারপরে আমরা স্বতন্ত্র কী-মান যুক্তগুলি যুক্ত করে যুক্ত করে থাকি করা পদ্ধতি আপনি আউটপুটে লক্ষ্য করতে পারেন যে উপাদানগুলি যে ক্রমে উপাদানগুলি পুনরুদ্ধার করা হয়েছে সেটিকে এটি যেভাবে সন্নিবেশ করানো হয়েছিল তার অনুরূপ নয়।

এরপরে, আমরা 'স্টু' নামে একটি দ্বিতীয় হ্যাশম্যাপ তৈরি করব এবং তারপরে 2 কী-মান জুটি যুক্ত করব। এটির পরে আমরা এটি ব্যবহার করে 'শিক্ষার্থী' মানচিত্রে যুক্ত করব সব রাখো পদ্ধতি।

import java.util.HashMap;
public class HashMapAdd {

  public static void main(String[] args) {
    HashMap<String,Integer> student = new HashMap<>();
    student.put("Arthi", 100);
    student.put("Dev", 105);
    student.put("Banu",102);
    student.put("Rishi", 108);
    System.out.println("Elements in student map:");
    System.out.println(student);
    
    HashMap<String,Integer> stu = new HashMap<>();
    stu.put("Ravi",110);
    stu.put("Tejas", 112);
    System.out.println("Elements in stu map:");
    System.out.println(stu);
    
    student.putAll(stu);
    
    System.out.println("Elements in student map after invoking putAll method:");
    System.out.println(student);
  }

}
Elements in student map:
{Dev=105, Banu=102, Rishi=108, Arthi=100}
Elements in stu map:
{Ravi=110, Tejas=112}
Elements in student map after invoking putAll method:
{Dev=105, Ravi=110, Tejas=112, Banu=102, Rishi=108, Arthi=100}

মানচিত্রে একটি নির্দিষ্ট কী বা মান রয়েছে কিনা তা পরীক্ষা করুন

আমরা ব্যাবহার করি কেকে একটি নির্দিষ্ট কী মানচিত্রে উপস্থিত কিনা তা পরীক্ষা করার পদ্ধতি এই ক্ষেত্রে, দেব উপস্থিত আছেন এবং তাই এটি সত্য করে এবং রবি উপস্থিত হয় না এবং তাই মিথ্যা প্রত্যাবর্তন করে।

একইভাবে, অন্তর্ভুক্ত নির্দিষ্ট মান উপস্থিত থাকলে পদ্ধতিটি পরীক্ষা করে। এখানে, 102 উপস্থিত রয়েছে তবে 110 উপস্থিত নেই এবং তাই প্রত্যাখ্যান করে।

import java.util.HashMap;
public class HashMapAdd {

  public static void main(String[] args) {
    HashMap<String,Integer> student = new HashMap<>();
    student.put("Arthi", 100);
    student.put("Dev", 105);
    student.put("Banu",102);
    student.put("Rishi", 108);
    System.out.println("Elements in student map:");
    System.out.println(student);
    
    System.out.println(student.containsKey("Dev"));
    System.out.println(student.containsKey("Ravi"));
    
    System.out.println(student.containsValue(102));
    System.out.println(student.containsValue(110));
  }

}
Elements in student map:
{Dev=105, Banu=102, Rishi=108, Arthi=100}
true
false
true
false

একটি কী-মান যুগল সরান এবং প্রতিস্থাপন করুন

এখানে, আমরা পূর্ণসংখ্যার জাভাতে একটি হ্যাশম্যাপ তৈরি করি স্ট্রিং ভাষা সঞ্চয় করতে টাইপ করুন। আমরা নির্দিষ্ট ডেটা দিয়ে দ্বিতীয় মানটি প্রতিস্থাপন করি এবং তৃতীয় মানটি প্রতিস্থাপন করি যদি নির্দিষ্ট কী-মান জুটি ব্যবহার করে মানচিত্রে উপস্থিত হয় প্রতিস্থাপন () পদ্ধতি।

তারপরে, আমরা কীটি ব্যবহার করে তৃতীয় উপাদানটি সরিয়ে ফেলব এবং 3 টির সাহায্যে কী-মানটি ব্যবহার করে সরিয়ে ফেলব remove অপসারণ() পদ্ধতি।

import java.util.HashMap;
public class RemoveHashMap {

  public static void main(String[] args) {
    HashMap<Integer,String> lang = new HashMap<>();
    lang.put(1, "Java");
    lang.put(2, "C");
    lang.putIfAbsent(3, "C++");
    System.out.println(lang);
    
    lang.replace(2, "PHP");
    System.out.println(lang);
    
    lang.replace(3, "C++", "JavaScript");
    System.out.println(lang);
    
    lang.remove(3);
    System.out.println(lang);
    
    lang.remove(1, "Java");		
    System.out.println(lang);
    
    
  }

}
{1=Java, 2=C, 3=C++}
{1=Java, 2=PHP, 3=C++}
{1=Java, 2=PHP, 3=JavaScript}
{1=Java, 2=PHP}
{2=PHP}

পরিষ্কার এবং খালি পদ্ধতির উদাহরণ

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

import java.util.HashMap;
public class RemoveHashMap {

  public static void main(String[] args) {
    HashMap<Integer,String> lang = new HashMap<>();
    lang.put(1, "Java");
    lang.put(2, "C");
    
    System.out.println(lang.isEmpty());
    lang.clear();
    
    System.out.println(lang.isEmpty());
    
  }

}
false
true

এন্ট্রিসেট ব্যবহার করে হ্যাশম্যাপ উপাদানগুলির মাধ্যমে আইট্রেট করা

জাভাতে হ্যাশম্যাপের পৃথক কী-মান জোড়গুলি পুনরুদ্ধার করতে, আমরা এটি ব্যবহার করতে পারি এন্ট্রিসেট সাথে হাশম্যাপের পদ্ধতি প্রবেশ a ব্যবহার করে মানচিত্রের ইন্টারফেসের পদ্ধতি প্রতিটি লুপ জন্য। মানচিত্র ইন্টারফেসের এন্ট্রি পদ্ধতিতে বিল্ট-ইন পদ্ধতি রয়েছে geyKey () চাবি পেতে এবং getValue () সংশ্লিষ্ট মান পেতে। আমরা ব্যবহার করতে পারেন আকার () মানচিত্রের আকার পেতে পদ্ধতি।

import java.util.HashMap;
import java.util.Map;
public class IterateHashMap {

  public static void main(String[] args) {
    HashMap<String,String> cityState = new HashMap<>();
    cityState.put("Bangalore", "Karnataka");
    cityState.put("Chennai", "TamilNadu");
    cityState.put("Madurai", "TamilNadu");
    cityState.put("Mumbai", "Maharashtra");
    
    System.out.println("Size of map is : " + cityState.size());
    
    for(Map.Entry<String,String> m : cityState.entrySet())
    {
      System.out.println(m.getKey() + " : " + m.getValue());
    }

  }

}
Size of map is : 4
Chennai : TamilNadu
Madurai : TamilNadu
Mumbai : Maharashtra
Bangalore : Karnataka

কীসেট () এবং মানগুলি () ব্যবহার করে উপাদানগুলির মধ্য দিয়ে লুপ করুন

হাশম্যাপ উপাদানগুলির মধ্য দিয়ে লুপ করার আরেকটি উপায় হ'ল চাবির গোচা() পদ্ধতি এটি ব্যবহার করে, আমরা নীচের উদাহরণে দেখা হিসাবে আলাদাভাবে সমস্ত কীগুলির একটি সেট পেতে পারি। সমস্ত মান পৃথকভাবে পেতে, আমরা এটি ব্যবহার করতে পারি মান () পদ্ধতি এবং লুপ জন্য এগুলি মুদ্রণ।

কীসেট ব্যবহার করে, আমরা লুপের জন্য পুনরায় ব্যবহার করে কী-মান জোড়গুলি মুদ্রণ করতে পারি পাওয়া() সম্পর্কিত মান পেতে পদ্ধতি।

import java.util.HashMap;
import java.util.Map;
public class IterateHashMap {

  public static void main(String[] args) {
    HashMap<String,String> cityState = new HashMap<>();
    cityState.put("Bangalore", "Karnataka");
    cityState.put("Chennai", "TamilNadu");
    cityState.put("Madurai", "TamilNadu");
    cityState.put("Mumbai", "Maharashtra");
    
    System.out.println("Printing only keys:");
    for(String s : cityState.keySet())
    {
      System.out.println(s);
    }
    System.out.println();
    System.out.println("Printing only values: ");
    for(String c : cityState.values())
    {
      System.out.println(c);
    }
    System.out.println();
    System.out.println("Printing both key-value pairs:");
    for(String v : cityState.keySet())
    {
      System.out.println("Key: " + v + " | value: " + cityState.get(v));
    }
  }

}
Printing only keys:
Chennai
Madurai
Mumbai
Bangalore

Printing only values: 
TamilNadu
TamilNadu
Maharashtra
Karnataka

Printing both key-value pairs:
Key: Chennai | value: TamilNadu
Key: Madurai | value: TamilNadu
Key: Mumbai | value: Maharashtra
Key: Bangalore | value: Karnataka

উপসংহার

এই টিউটোরিয়ালে, আপনি বিভিন্ন উদাহরণের সাথে হ্যাশম্যাপ এবং এর বিভিন্ন পদ্ধতি সম্পর্কে শিখলেন।

উল্লেখ