ตามเอกสารลิงค์ต่อไปนี้: การใช้งาน Java HashMap
ฉันสับสนกับการใช้งานHashMap
(หรือมากกว่านั้นคือการเพิ่มประสิทธิภาพในHashMap
) คำถามของฉันคือ:
ประการแรก
static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
static final int MIN_TREEIFY_CAPACITY = 64;
เหตุใดจึงใช้ค่าคงที่เหล่านี้และอย่างไร ฉันต้องการตัวอย่างที่ชัดเจนสำหรับเรื่องนี้ พวกเขาได้รับประสิทธิภาพที่เพิ่มขึ้นจากสิ่งนี้อย่างไร?
ประการที่สอง
หากคุณเห็นซอร์สโค้ดของHashMap
ใน JDK คุณจะพบคลาสภายในแบบคงที่ต่อไปนี้:
static final class TreeNode<K, V> extends java.util.LinkedHashMap.Entry<K, V> {
HashMap.TreeNode<K, V> parent;
HashMap.TreeNode<K, V> left;
HashMap.TreeNode<K, V> right;
HashMap.TreeNode<K, V> prev;
boolean red;
TreeNode(int arg0, K arg1, V arg2, HashMap.Node<K, V> arg3) {
super(arg0, arg1, arg2, arg3);
}
final HashMap.TreeNode<K, V> root() {
HashMap.TreeNode arg0 = this;
while (true) {
HashMap.TreeNode arg1 = arg0.parent;
if (arg0.parent == null) {
return arg0;
}
arg0 = arg1;
}
}
//...
}
มันใช้ยังไง? ฉันเพียงต้องการคำอธิบายขั้นตอนวิธีการที่
String
มีช่องว่างที่มีค่ามากกว่าint
แฮชโค้ดดังนั้นจึงหลีกเลี่ยงการชนกันไม่ได้ ตอนนี้มันขึ้นอยู่กับค่าจริงเช่นString
s จริงที่คุณใส่ลงในแผนที่ไม่ว่าคุณจะได้รับการแจกแจงแบบคู่หรือไม่ก็ตาม การกระจายที่ไม่ดีอาจเป็นผลมาจากความโชคร้าย