คำตอบ Jon Skeet ตอบโจทย์ทั้งสองสถานการณ์ได้ดี (แผนที่ที่มีnull
คุณค่าและไม่ใช่null
คุณค่า) อย่างมีประสิทธิภาพ
เกี่ยวกับรายการหมายเลขและความกังวลเกี่ยวกับประสิทธิภาพฉันต้องการเพิ่มบางอย่าง
ฉันมี HashMap ด้วยคำพูด 1.000 รายการและฉันกำลังมองหาการปรับปรุงประสิทธิภาพ หากมีการเข้าถึง HashMap บ่อยมากการตรวจสอบการมีอยู่ของคีย์ในการเข้าถึงทุกครั้งจะนำไปสู่ค่าใช้จ่ายจำนวนมาก
แผนที่ที่มีรายการ 1,000 รายการไม่ใช่แผนที่ขนาดใหญ่
เช่นเดียวกับแผนที่ที่มีรายการ 5.000 หรือ 10.000
Map
ถูกออกแบบมาเพื่อทำการดึงข้อมูลอย่างรวดเร็วด้วยมิติดังกล่าว
ทีนี้ก็ถือว่าhashCode()
ปุ่มแผนที่ให้การกระจายที่ดี
หากคุณสามารถใช้Integer
เป็นประเภทคีย์ได้
ใช้hashCode()
วิธีการที่มีประสิทธิภาพมากตั้งแต่การชนกันเป็นไปไม่ได้สำหรับที่ไม่ซ้ำกันint
ค่า:
public final class Integer extends Number implements Comparable<Integer> {
...
@Override
public int hashCode() {
return Integer.hashCode(value);
}
public static int hashCode(int value) {
return value;
}
...
}
ถ้าสำหรับกุญแจคุณต้องใช้บิวด์อินอื่นเป็นString
ตัวอย่างที่มักใช้Map
คุณอาจมีการชนกัน แต่จาก 1 ถึง 1,000 ถึงบางส่วนของออบเจ็กต์ในMap
คุณควรมีน้อยมากเป็นString.hashCode()
วิธี ให้การกระจายที่ดี
หากคุณใช้ประเภทที่กำหนดเองให้แทนที่hashCode()
และequals()
ถูกต้องและให้แน่ใจว่าภาพรวมนั้นhashCode()
มีการแจกแจงที่ยุติธรรม
คุณอาจอ้างถึงรายการที่ 9 ของการJava Effective
อ้างอิง
นี่คือโพสต์ที่มีรายละเอียดวิธีการ