የሃሽማፕ ዘዴዎች ጃቫ  



ሃሽ ማፕ ጃቫ የጃቫ ካርታ

በጃቫ ውስጥ ያለው የሃሽማፕ ክፍል ውሂቡን በ ውስጥ ያከማቻል ቁልፍ-እሴት ቁልፉ መረጃ ልዩ መሆን ያለበት ጥንድ በተዛማጅ የቁልፍ ውሂብ ላይ በመመርኮዝ እሴቶቹን መድረስ እንችላለን ፡፡ ሃሽማፕ በጃቫ የስብስብ ማዕቀፍ ውስጥ የሚገኝ ሲሆን የ java.util ጥቅል አካል ነው ፡፡ በሃሺንግ ቴክኒክ መርህ ላይ ይሠራል ፡፡

የጃቫ ሃሽማፕ የሥልጣን ተዋረድ  

በጃቫ ውስጥ ያለው “ሃሽማፕ” ክፍል ይረዝማል ረቂቅ መደብ ረቂቅ ካርታ እና ይተገበራል ካርታ በይነገጽ ከዚህ በታች እንደሚታየው.

ሃሽ ማፕ በጃቫ ውስጥ

የሃሽማፕ መዋቅር እና የስራ መርህ  

በጃቫ ውስጥ HashMap በ ‹መርህ› ላይ ይሠራል ማሳከክ ቴክኒክ. በሃሺንግ ውስጥ በሃሽ ማፕ ውስጥ ቁልፍን እና ዋጋን ለማገናኘት የሃሽ ተግባራትን እንጠቀማለን ፡፡ ሃሽ ማፕ የቁልፍ እሴት ጥንዶችን በ ‹ሀ› መልክ ያከማቻል ደርድር እያንዳንዱ ግቤት እንደ ባልዲ የሚቆጠርባቸው የአንጓዎች ፡፡ ባልዲ በድርድር ውስጥ ካለው ንጥረ ነገር በስተቀር ምንም አይደለም። እያንዳንዱ መስቀለኛ መንገድ 3 እሴቶች አሉት ቁልፍ, ዋጋ ፣ እና አገናኝ ወደ ቀጣዩ መስቀለኛ መንገድ ከ 1 በላይ መስቀለኛ መንገድ ተመሳሳይ ኢንዴክስ ሲያጋራ የተገናኘ ዝርዝርን ይወክላል። እያንዳንዱ መስቀለኛ መንገድ ሃሽ ኮድን () በመጠቀም በሚሰላው ባልዲ ውስጥ ባለው መረጃ ጠቋሚ ላይ ካርታ ይደረጋል ፡፡

ሃሽ ማፕ በጃቫ ውስጥ

የሃሽ ማፕ አፈፃፀም  

በጃቫ ውስጥ የሃሽማፕ አፈፃፀም ከዚህ በታች ባሉት መለኪያዎች ላይ የተመሠረተ ነው-

  • የመነሻ አቅም - ሲጀመር አንድ HashMap ምን ያህል ባልዲዎችን ሊያከማች እንደሚችል ያሳያል ፡፡ በነባሪነት ነው 16 የቁልፍ እሴት ጥንዶች።
  • ጭነት ምክንያት - ሊጨምር የሚገባው የአቅም መቶኛ ነው። በነባሪነት ነው 0.75
  • ደፍ - ይህ የመነሻ እሴቱ የመጫኛ እና የአቅም ውጤት ነው 12 (16 * 0.75)
  • Rehashing - ይህ ደፍ እሴቱ ከደረሰ በኋላ አቅሙን በእጥፍ የማሳደግ ሂደት ነው።
ተመልከት
በጃቫ ውስጥ የድርድር መቆለፊያ

የጃቫ ሃሽማፕ መግለጫ  

በጃቫ ውስጥ HashMap ን ለመጠቀም ከውጭ ማስመጣት አለብን java.util.HashMap ጥቅል. አገባቡ ከዚህ በታች እንደሚከተለው ነው-

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

ቁልፍ ዓይነት - የቁልፍ መረጃ ዓይነት ነው.Eg: ሕብረቁምፊ ወይም ኢንቲጀር

ValueType - እሱ የእሴት ውሂብ ዓይነት ነው። ምሳሌ: ገመድ ወይም ኢንትመር

የሃሽማፕ ባህሪዎች  

በጃቫ ውስጥ የሃሽማፕ ገፅታዎች ከዚህ በታች ናቸው-

  • ከእያንዳንዱ ቁልፍ ጋር የሚዛመዱ እሴቶችን ያከማቻል
  • ልዩ ቁልፎችን ብቻ ይይዛል
  • የተባዙ ቁልፎችን አይፈቅድም ግን የተባዙ እሴቶች ሊኖሩት ይችላል
  • እሱ ማንኛውንም ትዕዛዝ አይጠብቅም ማለት ነው ይህም ማለት መረጃው የገባበት ቅደም ተከተል ከተገኘበት ቅደም ተከተል ጋር ተመሳሳይ አይደለም።
  • እሱ አልተመሳሰለም

የጃቫ ሃሽማፕ ክፍል ገንቢዎች  

HashMap ከዚህ በታች ባለው ሰንጠረዥ ውስጥ እንደሚመለከቱት 4 የተለያዩ ገንቢዎችን ይደግፋል-

ግንበኛመግለጫ
ሃሽ ማፕ ()ነባሪ ሃሽማፕን ያስጀምራል
ሃሽ ማፕ (ማፕ)ሃሽማፕን ከካርታ ሜ አካላት ጋር ይጀምራል
ሃሽማፕ (int አቅም)ከተጠቀሰው የአቅም ኢንቲጀር እሴት ጋር ሃሽማን ይጀምራል
ሃሽማፕ (Int አቅም ፣ ተንሳፋፊ ጭነት አምራች)ከተጠቀሰው አቅም እና ከላፕፋክተር ጋር ሀሽማን ይጀምራል

የሃሽማፕ ዘዴዎች  

ጃቫ ሃሽማፕ ከዚህ በታች ባለው ሰንጠረዥ ከተጠቀሱት ዘዴዎች ጋር የካርታ በይነገጽ የሆኑትን ሁሉንም ዘዴዎች ይደግፋል

መንገድመግለጫየልኬት
ባዶ ()በዚህ ካርታ ውስጥ ሁሉንም ካርታዎች ያስወግዳል ይህም ማለት ካርታው ባዶ ይሆናል ማለት ነው
የነገር ክሎነር ()የዚህን HashMap ምሳሌ ጥልቀት የሌለው ቅጅ ይመልሳል። ቁልፍ እና እሴቶች እራሳቸውን ችለው አይደሉም
ቡሊያን ቁልፍን ይ Obል (የነገር ቁልፍ)ለተጠቀሰው ቁልፍ የካርታ እሴት ካለ ወደ እውነት ይመለሳልቁልፍ - ዋጋውን ለማግኘት የምንፈልግበት ቁልፍ
ቡሊያን ዋጋ አለው (የነገር እሴት)ለተጠቀሰው እሴት ቁልፍ ካርታ ካለ ወደ እውነት ይመለሳልእሴት - የተጠቀሰው ቁልፍ የታቀደበት እሴት
አዘጋጅ የመግቢያ ስብስብ ()የካርታ ካርታውን የተቀናበረ እይታ ይመልሳል
የቦሊያን እኩል (Object o)ነገሩ ተመሳሳይ የካርታ ካርታ ካለው ወደ እውነት ይመለሳልo - የሚነፃፀር ነገር
ኢንቲጀር ማግኘት (የነገር ቁልፍ)በካርታው ውስጥ የተገለጸውን ቁልፍ ዋጋ ይመልሳል። ምንም ካርታ ከሌለ ባዶውን ይመልሳልቁልፍ - የእሴት ካርታ (ካርታ) እንዲወጣ የሚፈለግበት ቁልፍ
ኢንቲጀር getOrDefault (የነገር ቁልፍ ፣ ኢንቲሜር ነባሪ ዋጋ)የካርታ ከሆነ የተገለጸውን ቁልፍ ዋጋ ይመልሳል ፣ ሌላም ካርታ ከሌለ የገንዘቡን ዋጋ ይመልሳልቁልፍ - ዋጋ የምንሰጠው ቁልፍ መመለስ አለበት
ነባሪ ዋጋ - ካርታ በማይኖርበት ጊዜ የሚመለሰው ነባሪ እሴት
int hashCode ()የካርታውን ሃሽኮድ እሴት ይመልሳል
ቡሊያን ባዶ ነው ()እውነት ይመለሳል ፣ ሀሽማው ምንም ቁልፍ ዋጋ ያላቸው ጥንዶች የለውም
የቁልፍ ሴትን ያዘጋጁ ()በካርታው ውስጥ የሚገኙትን ቁልፎች ስብስብ እይታ ይመልሳል
ኢንቲጀር የተቀመጠ (የሕብረቁምፊ ቁልፍ ፣ int እሴት)ቁልፉን ከእሴት ጋር ያዛምዳል። ቁልፉ ቀድሞውኑ ካለ አሮጌውን እሴት በአዲስ እሴት ይተካዋልቁልፍ - ለካርታ ቁልፍ
እሴት - ለተጠቀሰው ቁልፍ እሴት
ባዶነት ሁሉም (ካርታ ሜትር)ሁሉንም ቁልፍ - የ m እሴት ካርታዎች ከአሁኑ ካርታ ጋር ያዛምዳልm - አሁን ባለው ካርታ ላይ የሚጨመሩ የካርታ ቅጂዎች
ኢንቲጀር putIfAbsent (የሕብረቁምፊ ቁልፍ ፣ የኢቲመር እሴት)ከሌላው ቁልፍ ጋር ካልታየ እሴቱን ያዛምዳል የአሁኑን ዋጋ ይመልሳልቁልፍ - ለካርታ ቁልፍ
እሴት - የሚዛመደው እሴት
ኢንደመር ማስወገድ (የነገር ቁልፍ)በካርታው ውስጥ ለተጠቀሰው ቁልፍ ካርታውን ያስወግዳልቁልፍ - በካርታው ውስጥ የትኛው ካርታ መወገድ ያለበት ቁልፍ
ቡሊያን አስወግድ (የነገር ቁልፍ ፣ የነገር እሴት)ከተጠቀሰው እሴት ጋር ከተቀረጸ ብቻ የተገለጸውን ቁልፍ ግቤት ያስወግዳልቁልፍ - በካርታ ውስጥ ቁልፍ
እሴት - እሴት ለቁልፍ የተቀረፀ
ኢንቲጀር ይተካዋል (የሕብረቁምፊ ቁልፍ ፣ ኢንቲጀር እሴት)የተገለጸውን ቁልፍ ዋጋ ከእሴቱ ጋር የሚተካው በአሁኑ ጊዜ ከተወሰነ እሴት ጋር ካርታ ካለው ብቻ ነውቁልፍ - በካርታ ውስጥ ቁልፍ
ዋጋ - የሚተካ እሴት
የቦሊያን መተካት (ሕብረቁምፊ ቁልፍ ፣ ኢንቲጀር oldvalue ፣ ኢንቲጀር አዲስ እሴት)የተገለጸውን ቁልፍ ግቤት በአዲስ እሴት ይተካዋል ፣ ከተጠቀሰው የድሮ ዋጋ ጋር ቀድሞውኑ ከተቀረጸ ብቻቁልፍ - በካርታው ውስጥ ቁልፍ
oldvalue - oldvalue ወደ ካርታ የተቀየረ
አዲስ ዋጋ - በቁልፍ ላይ የሚታየውን አዲስ ዋጋ
int መጠን ()የካርታውን መጠን ይመልሳል
ሕብረቁምፊ ወደ ወደ ውጭ ()የካርታው ሕብረቁምፊ ውክልና ይመልሳል
የስብስብ እሴቶች ()በካርታው ውስጥ ያሉትን የእሴቶች ስብስብ እይታ ይመልሳል
ተመልከት
በጃቫ ውስጥ HashSet

የሃሽማፕ ልዩነቶች  

ከዚህ በታች ያሉትን የማይካተቱ በጃቫ ውስጥ ይጥላል-

  • ተዛማጅ ለውጥException
  • ኢልጋልጋል ሞናተርቴክት
  • NullPointerException
  • ተቋርጧል
  • ህገ-ወጥነት የሰጠው አስተያየት

ንጥረ ነገሮችን ወደ ሃሽ ማፕ ማከል  

ከዚህ በታች ባለው ምሳሌ ውስጥ እንደሚመለከቱት በመጀመሪያ ‹የተማሪ› የሚል ስም ያለው ‹HashMap› እና የ “ኢንቲጀር” ዓይነት ቁልፍ እና እሴት ያለው ቁልፍ እንፈጥራለን ፡፡ እኛ በመጠቀም የግለሰብ ቁልፍ እሴት ጥንዶችን እንጨምራለን አስቀመጠ ዘዴ. ንጥረ ነገሮቹ የተገኙበት ቅደም ተከተል ከገባበት ቅደም ተከተል ጋር ተመሳሳይ አለመሆኑን በውጤቱ ውስጥ ማስተዋል ይችላሉ ፡፡

በመቀጠልም ‹ስቱ› የተሰየመ ሁለተኛውን የሃሽማፕን እንፈጥራለን ከዚያም 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}

ካርታው የተወሰነ ቁልፍ ወይም እሴት የያዘ መሆኑን ያረጋግጡ  

እንጠቀማለን ኬይ ይKል አንድ የተወሰነ ቁልፍ በካርታው ውስጥ መኖር አለመኖሩን ለመፈተሽ ዘዴ። በዚህ አጋጣሚ ዴቭ ተገኝቷል እናም እሱ ወደ እውነት ይመለሳል እናም ራቪ የለም እና ስለሆነም ሐሰተኛ ነው ፡፡

በተመሳሳይ ፣ እሴት ይ containsል አንድ የተወሰነ እሴት ካለ ካለ ዘዴ ምርመራዎች። እዚህ 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

የቁልፍ እሴት ጥንድን ያስወግዱ እና ይተኩ  

እዚህ ፣ በጃቫ ኢንቲጀር ውስጥ ሃሽማፕ እንፈጥራለን እና ሕብረቁምፊ ቋንቋዎችን ለማከማቸት ይተይቡ። የተወሰነ የቁልፍ-እሴት ጥንድ በመጠቀም በካርታው ውስጥ የሚገኝ ከሆነ የ 2 ኛውን እሴት በአዲስ ውሂብ እንተካለን እና 3 ኛውን እሴት እንተካለን መተካት () ዘዴ.

ተመልከት
በጃቫ ውስጥ LinkedBlockingDeque

ከዚያ ቁልፉን በመጠቀም ሦስተኛውን አካል እናስወግደዋለን እና ቁልፍን በመጠቀም እሴቱን በመጠቀም የ 3 ኛውን አካል እናነሳለን አስወግድ () ዘዴ.

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}

ግልጽ እና ባዶ ዘዴዎች ምሳሌ  

በጃቫ ውስጥ HashMap ን ይጠቀማል ግልጽ () በካርታው ውስጥ የቁልፍ ዋጋ ጥንድ ካርታዎችን ለማጽዳት ዘዴ እና ባዶ ነው ካርታው ባዶ ከሆነ ዘዴ ቼኮች። የ 1 ኛ ውፅዓት የካርታ ስራ (ካርታ) በመገኘቱ እና 2 ኛው ውፅዓት እውነት ነው ምክንያቱም ካርታው ግልፅ () ዘዴን ከጠራ በኋላ ምንም ቁልፍ ዋጋ ያላቸው ጥንድ የለውም ፡፡

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

የመግቢያ ቅንብርን በመጠቀም በሃሽማፕ አካላት በኩል ኢተቴት ማድረግ  

በጃቫ ውስጥ ያሉትን የሃሽማፕ ቁልፍ ቁልፍ ዋጋ ጥንድዎችን ለማግኘት ፣ ልንጠቀምባቸው እንችላለን የመግቢያ ስብስብ የሃሽማፕ ዘዴ ከ ግቤት የካርታ በይነገጽ ዘዴ ሀ ለእያንዳንዱ ዑደት. የካርታ በይነገጽ የመግቢያ ዘዴ እንደ አብሮገነብ ዘዴዎች አሉት geyKey () ቁልፉን ለማግኘት እና ዋጋ () ተጓዳኝ እሴቱን ለማግኘት. እኛ ልንጠቀምበት እንችላለን መጠን () የካርታውን መጠን ለማግኘት ዘዴ ፡፡

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

መደምደሚያ  

በዚህ መማሪያ ውስጥ ስለ ሃሽማፕ እና ስለ ተለያዩ ዘዴዎቹ ከተለያዩ ምሳሌዎች ጋር ተምረዋል ፡፡

ማጣቀሻ