ฟังก์ชัน 'hashCode' ใช้เพื่อรับรหัสแฮชของวัตถุใน Java นี่คืออ็อบเจ็กต์ของ super class Object ส่งคืนหน่วยความจำอ้างอิงวัตถุเป็นจำนวนเต็ม เป็นฟังก์ชันแบบเนทีฟ ซึ่งหมายความว่าไม่สามารถใช้เมธอดโดยตรงใน Java เพื่อดึงข้อมูลอ้างอิงของอ็อบเจ็กต์ได้
เพื่อประสิทธิภาพที่ดีขึ้นของ HashMap ให้ใช้ hashCode() อย่างถูกต้อง โดยทั่วไป ฟังก์ชันนี้จะใช้ในการคำนวณค่าที่ฝากข้อมูลและดัชนี กำหนดไว้ดังนี้ −
public native hashCode()
เนื่องจากเราได้กล่าวถึง 'ถัง' สิ่งสำคัญคือต้องเข้าใจว่ามันหมายถึงอะไร เป็นองค์ประกอบที่ใช้เก็บโหนด สามารถมีได้มากกว่าหนึ่งโหนดในที่ฝากข้อมูลเดียว โหนดสามารถเชื่อมต่อได้โดยใช้โครงสร้างข้อมูลรายการที่เชื่อมโยง ความจุของแฮชแมปสามารถคำนวณได้โดยใช้บัคเก็ตและตัวประกอบการโหลด
Capacity = number of buckets * load factor
ฟังก์ชัน 'เท่ากับ' ใช้เพื่อตรวจสอบความเท่าเทียมกันระหว่างสองวัตถุ มันยังได้รับจาก super class Object ฟังก์ชันนี้สามารถแทนที่ได้ในคลาสที่กำหนดเองโดยจัดเตรียมการใช้งานที่กำหนดเอง ฟังก์ชันนี้จะคืนค่าเป็นจริงหรือเท็จขึ้นอยู่กับว่าวัตถุทั้งสองในคำถามมีค่าเท่ากันหรือไม่
ค่าดัชนีถูกสร้างขึ้นเพื่อให้ขนาดของอาร์เรย์ไม่ใหญ่ ดังนั้นจึงหลีกเลี่ยง outOfMemoryException สูตรการหาดัชนีของอาร์เรย์คือ −
Index = hashCode(key) & (n-1) – Here n refers to number of buckets.
เรามาดูตัวอย่างกัน −
ตัวอย่าง
import java.util.HashMap;
class hash_map{
String key;
hash_map(String key){
this.key = key;
}
@Override
public int hashCode(){
int hash = (int)key.charAt(0);
System.out.println("The hash code for key : " + key + " = " + hash);
return hash;
}
@Override
public boolean equals(Object obj){
return key.equals(((hash_map)obj).key);
}
}
public class Demo{
public static void main(String[] args){
HashMap my_map = new HashMap();
my_map.put(new hash_map("This"), 15);
my_map.put(new hash_map("is"), 35);
my_map.put(new hash_map("a"), 26);
my_map.put(new hash_map("sample"), 45);
System.out.println("The value for key 'this' is : " + my_map.get(new hash_map("This")));
System.out.println("The value for key 'is' is: " + my_map.get(new hash_map("is")));
System.out.println("The value for key 'a' is: " + my_map.get(new hash_map("a")));
System.out.println("The value for key 'sample' is: " + my_map.get(new hash_map("sample")));
}
} ผลลัพธ์
The hash code for key : This = 84 The hash code for key : is = 105 The hash code for key : a = 97 The hash code for key : sample = 115 The hash code for key : This = 84 The value for key 'this' is : 15 The hash code for key : is = 105 The value for key 'is' is: 35 The hash code for key : a = 97 The value for key 'a' is: 26 The hash code for key : sample = 115 The value for key 'sample' is: 45
คลาสชื่อ 'hash_map' กำหนดสตริงและตัวสร้าง สิ่งนี้ถูกแทนที่โดยฟังก์ชันอื่นที่ชื่อว่า 'hashCode' ที่นี่ ค่าคีย์ของ hashmap จะถูกแปลงเป็นจำนวนเต็มและพิมพ์รหัสแฮช ถัดไป ฟังก์ชัน 'เท่ากับ' จะถูกแทนที่และตรวจสอบว่าคีย์นั้นเท่ากับคีย์ของแฮชแมปหรือไม่ คลาสสาธิตกำหนดฟังก์ชันหลักที่สร้างอินสแตนซ์ใหม่ของ HashMap องค์ประกอบถูกเพิ่มเข้าไปในโครงสร้างนี้โดยใช้ฟังก์ชัน 'put' และพิมพ์บนคอนโซล