เมธอด HashMap Java



HashMap ชวา แผนที่ Java

HashMap Class ใน Java จัดเก็บข้อมูลในรูปแบบ คีย์ - ค่า คู่ที่ข้อมูลสำคัญควรไม่ซ้ำกัน เราสามารถเข้าถึงค่าตามข้อมูลสำคัญที่เกี่ยวข้อง HashMap มีอยู่ในกรอบงาน Collection ของ Java และเป็นส่วนหนึ่งของแพ็คเกจ java.util มันทำงานบนหลักการของเทคนิค Hashing

ลำดับชั้น Java HashMap

คลาส HashMap ใน Java ขยายไฟล์ นามธรรม ชั้น บทคัดย่อแผนที่ และใช้งานไฟล์ แผนที่ อินเทอร์เฟซดังที่แสดงด้านล่าง

HashMap ใน Java

โครงสร้าง HashMap และหลักการทำงาน

HashMap ใน Java ทำงานบนหลักการของ hashing เทคนิค. ในการแฮชเราใช้ฟังก์ชันแฮชเพื่อเชื่อมโยงคีย์และค่าใน HashMap HashMap จัดเก็บคู่คีย์ - ค่าในรูปแบบของไฟล์ แถว ของโหนดที่แต่ละรายการถือเป็นที่เก็บข้อมูล ที่เก็บข้อมูลไม่ใช่แค่องค์ประกอบในอาร์เรย์ แต่ละโหนดมี 3 ค่า: คีย์, มูลค่า และเชื่อมโยงไปยังไฟล์ ถัดไป โหนด เมื่อโหนดมากกว่า 1 โหนดแชร์ดัชนีเดียวกันจะแสดงถึงรายการที่เชื่อมโยง ทุกโหนดจะแมปกับดัชนีในที่เก็บข้อมูลซึ่งคำนวณโดยใช้ hashcode ()

HashMap ใน Java

ประสิทธิภาพของ HashMap

ประสิทธิภาพของ HashMap ใน Java ขึ้นอยู่กับพารามิเตอร์ด้านล่าง:

  • ความจุเริ่มต้น - หมายถึงจำนวนที่เก็บข้อมูลที่ HashMap สามารถจัดเก็บได้เมื่อเริ่มต้น โดยค่าเริ่มต้นก็คือ 16 คู่คีย์ - ค่า
  • Load Factor - เป็นเปอร์เซ็นต์ของความจุที่ต้องเพิ่มขึ้น โดยค่าเริ่มต้นก็คือ 0.75
  • เกณฑ์ - นี่คือผลคูณของโหลดแฟคเตอร์และความจุที่มีค่าเริ่มต้นคือ 12 (16 * 0.75)
  • Rehashing - นี่คือขั้นตอนการเพิ่มความจุเป็นสองเท่าหลังจากถึงค่าเกณฑ์

การประกาศ Java HashMap

ในการใช้ HashMap ใน Java เราจำเป็นต้องนำเข้า java.util.HashMap แพคเกจ ไวยากรณ์เป็นไปตามที่ระบุด้านล่าง:

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

ประเภทคีย์ - เป็นประเภทของข้อมูลสำคัญ.Eg: สตริงหรือจำนวนเต็ม

ValueType - เป็นชนิดของข้อมูลค่า เช่นสตริงหรือจำนวนเต็ม

คุณสมบัติ HashMap

ด้านล่างนี้เป็นคุณสมบัติของ HashMap ใน Java:

  • เก็บค่าที่สอดคล้องกับแต่ละคีย์
  • มีเฉพาะคีย์ที่ไม่ซ้ำกัน
  • ไม่อนุญาตให้มีคีย์ที่ซ้ำกัน แต่สามารถมีค่าที่ซ้ำกันได้
  • ไม่รักษาลำดับใด ๆ ซึ่งหมายความว่าลำดับที่ข้อมูลถูกแทรกไม่เหมือนกับลำดับที่ดึงข้อมูล
  • มันไม่ซิงโครไนซ์

ตัวสร้างคลาส Java HashMap

HashMap รองรับ 4 ตัวสร้างที่แตกต่างกันดังที่คุณเห็นในตารางด้านล่าง:

นวกรรมิกรายละเอียด
แฮชแมพ ()เริ่มต้น HashMap เริ่มต้น
HashMap (แผนที่)เริ่มต้น Hashmap ด้วยองค์ประกอบของแผนที่ m
HashMap (ความจุ int)เริ่มต้นแฮชแมปด้วยค่าจำนวนเต็มความจุที่ระบุ
HashMap (ความจุ int, loadfactor แบบลอยตัว)เริ่มต้นแฮชแมปด้วยความจุและปัจจัยการโหลดที่ระบุ

วิธี HashMap

Java HashMap รองรับวิธีการทั้งหมดที่เป็นของส่วนต่อประสานแผนที่พร้อมกับวิธีการที่กล่าวถึงในตารางด้านล่าง

วิธีรายละเอียดพารามิเตอร์
เป็นโมฆะชัดเจน ()ลบการแมปทั้งหมดในแผนที่นี้ซึ่งหมายความว่าแผนที่จะว่างเปล่า
โคลนวัตถุ ()ส่งคืนสำเนาตื้นของอินสแตนซ์ HashMap นี้ คีย์และค่าจะไม่ถูกโคลน
บูลีนประกอบด้วยคีย์ (คีย์วัตถุ)ส่งคืนจริงหากมีค่าการแมปสำหรับคีย์ที่ระบุคีย์ - คีย์ที่เราต้องใช้ในการดึงค่า
บูลีนมีค่า (ค่าวัตถุ)ส่งคืนจริงหากมีการแมปคีย์สำหรับค่าที่ระบุค่า - ค่าที่คีย์ที่ระบุถูกแมป
ชุด entrySet ()ส่งคืนมุมมองที่กำหนดของการทำแผนที่ของแผนที่
บูลีนเท่ากับ (วัตถุ o)ส่งคืนค่าจริงหากวัตถุมีการแม็ปแผนที่เหมือนกันo - วัตถุที่จะเปรียบเทียบ
จำนวนเต็มรับ (คีย์ออบเจ็กต์)ส่งคืนค่าของคีย์ที่ระบุในแผนที่ จะคืนค่าว่างหากไม่มีการแมปคีย์ - คีย์ที่ต้องดึงข้อมูลการแมปค่า
จำนวนเต็ม getOrDefault (Object key, Integer defaultvalue)ส่งคืนค่าของคีย์ที่ระบุหากแมปมิฉะนั้นจะคืนค่าเริ่มต้นหากไม่มีการแมปคีย์ - คีย์ที่เราให้ความสำคัญจะต้องถูกส่งกลับ
defaultvalue - ค่าเริ่มต้นที่จะส่งคืนเมื่อไม่มีการแมป
int hashCode ()ส่งคืนค่าแฮชโค้ดของแผนที่
บูลีน isEmpty ()ส่งคืนจริงคือแฮชแมปไม่มีคู่คีย์ - ค่าใด ๆ
ตั้งค่า keySet ()ส่งกลับมุมมองชุดของคีย์ที่มีอยู่ในแผนที่
ใส่จำนวนเต็ม (คีย์สตริงค่า int)เชื่อมโยงคีย์กับค่า หากมีคีย์อยู่แล้วคีย์จะแทนที่ค่าเก่าด้วยค่าใหม่คีย์ - คีย์สำหรับการทำแผนที่
value - ค่าสำหรับคีย์ที่ระบุ
เป็นโมฆะ putAll (แผนที่ m)เชื่อมโยงการแมปคีย์ - ค่าทั้งหมดของ m กับแผนที่ปัจจุบันm - สำเนาของการทำแผนที่ที่จะเพิ่มลงในแผนที่ปัจจุบัน
จำนวนเต็ม putIfAbsent (คีย์สตริงค่าจำนวนเต็ม)เชื่อมโยงค่าหากยังไม่ได้แมปกับคีย์ else จะส่งคืนค่าปัจจุบันคีย์ - คีย์สำหรับการทำแผนที่
value - มูลค่าที่จะเชื่อมโยง
จำนวนเต็มลบ (คีย์ออบเจ็กต์)ลบการแมปสำหรับคีย์ที่ระบุในแผนที่คีย์ - คีย์ในแผนที่ที่ต้องลบการแมป
ลบบูลีน (คีย์วัตถุค่าวัตถุ)ลบรายการของคีย์ที่ระบุหากแมปด้วยค่าที่ระบุเท่านั้นคีย์ - ป้อนแผนที่
value - ค่าที่แมปกับคีย์
แทนที่จำนวนเต็ม (คีย์สตริงค่าจำนวนเต็ม)แทนที่ค่าของคีย์ที่ระบุด้วยค่าก็ต่อเมื่อมีการแมปด้วยค่าบางค่าคีย์ - ป้อนแผนที่
มูลค่า - มูลค่าที่จะถูกแทนที่
แทนที่บูลีน (คีย์สตริง, ค่าเก่าจำนวนเต็ม, ค่าใหม่จำนวนเต็ม)แทนที่รายการของคีย์ที่ระบุด้วยค่าใหม่ก็ต่อเมื่อแมปกับ oldvalue ที่ระบุไว้แล้วคีย์ - คีย์ในแผนที่
oldvalue - oldvalue แมปกับคีย์
newvalue - ค่าใหม่ที่จะแมปกับคีย์
ขนาด int ()ส่งกลับขนาดของแผนที่
สตริง toString ()ส่งกลับการแสดงสตริงของแผนที่
ค่าการรวบรวม ()ส่งคืนมุมมองคอลเล็กชันของค่าที่มีอยู่ในแผนที่

ข้อยกเว้นของ HashMap

มันแสดงข้อยกเว้นด้านล่างใน Java:

  • ConcurrentModificationException
  • IllelgalMonitorStateException
  • NullPointerException
  • InterruptedException
  • IllegalArgumentException

การเพิ่มองค์ประกอบลงใน HashMap

ดังที่คุณเห็นในตัวอย่างด้านล่างก่อนอื่นเราสร้าง HashMap ชื่อ 'student' ด้วยคีย์ของประเภท String และค่าของประเภท Integer จากนั้นเราจะเพิ่มคู่คีย์ - ค่าแต่ละคู่โดยใช้ ใส่ วิธี. คุณสามารถสังเกตได้ในผลลัพธ์ว่าลำดับที่ดึงข้อมูลองค์ประกอบนั้นไม่เหมือนกับลำดับที่ใส่เข้าไป

ต่อไปเราจะสร้าง HashMap ที่สองชื่อ 'stu' จากนั้นเพิ่มคู่คีย์ - ค่า 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}

ตรวจสอบว่าแผนที่มีคีย์หรือค่าเฉพาะหรือไม่

เราใช้ ประกอบด้วยคีย์ วิธีตรวจสอบว่ามีคีย์เฉพาะอยู่ในแผนที่หรือไม่ ในกรณีนี้ Dev มีอยู่และด้วยเหตุนี้จึงส่งคืนจริงและ Ravi ไม่อยู่และส่งกลับเท็จ

ในทำนองเดียวกัน ประกอบด้วยค่า วิธีตรวจสอบว่ามีค่าเฉพาะหรือไม่ ที่นี่ 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

ลบและเปลี่ยนคู่คีย์ - ค่า

ที่นี่เราสร้างแฮชแมปใน Java ของ Integer และ เชือก พิมพ์เพื่อจัดเก็บภาษา เราแทนที่ค่าที่ 2 ด้วยข้อมูลใหม่และแทนที่ค่าที่ 3 หากมีคู่คีย์ - ค่าที่ระบุอยู่ในแผนที่โดยใช้ แทนที่ () วิธี

จากนั้นเราลบองค์ประกอบที่ 3 โดยใช้คีย์และลบองค์ประกอบที่ 1 โดยใช้คีย์ - ค่าโดยใช้ ลบ () วิธี

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 ใน Java ใช้ไฟล์ ชัดเจน() วิธีการล้างการแมปคู่คีย์ - ค่าในแผนที่และ มันว่างเปล่า วิธีตรวจสอบว่าแผนที่ว่างหรือไม่ เอาต์พุตที่ 1 เป็นเท็จเนื่องจากมีการแม็ปและเอาต์พุตที่ 2 เป็นจริงเนื่องจากแมปไม่มีคู่คีย์ - ค่าใด ๆ หลังจากเรียกใช้เมธอด clear ()

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

การวนซ้ำผ่านองค์ประกอบ HashMap โดยใช้ entrySet

ในการดึงข้อมูลคู่คีย์ - ค่าแต่ละคู่ของ HashMap ใน Java เราสามารถใช้ไฟล์ รายการSet วิธีการของ HashMap พร้อมกับไฟล์ การเข้า วิธีการของอินเทอร์เฟซแผนที่โดยใช้ไฟล์ สำหรับแต่ละวง. วิธีการป้อนข้อมูลของอินเทอร์เฟซแผนที่มีวิธีการในตัวเช่น 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

วนซ้ำองค์ประกอบโดยใช้ keySet () และค่า ()

อีกวิธีหนึ่งในการวนซ้ำองค์ประกอบ Hashmap คือการใช้ไฟล์ ชุดคีย์ () วิธี. เมื่อใช้สิ่งนี้เราจะได้ชุดของคีย์ทั้งหมดแยกจากกันดังที่เห็นในตัวอย่างด้านล่าง ในการรับค่าทั้งหมดแยกกันเราสามารถใช้ไฟล์ ค่า () วิธีการและพิมพ์เป็นห่วง

เมื่อใช้ keySet เรายังสามารถพิมพ์คู่คีย์ - ค่าได้โดยการวนซ้ำเพื่อวนซ้ำโดยใช้ รับ () วิธีการรับค่าที่สอดคล้องกัน

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

สรุป

ในบทช่วยสอนนี้คุณได้เรียนรู้เกี่ยวกับ HashMap และวิธีการต่างๆพร้อมทั้งตัวอย่างต่างๆ

การอ้างอิง