Sesuai dokumen tautan berikut: Implementasi Java HashMap
Saya bingung dengan implementasi HashMap
(atau lebih tepatnya, peningkatan dalam HashMap
). Pertanyaan saya adalah:
pertama
static final int TREEIFY_THRESHOLD = 8;
static final int UNTREEIFY_THRESHOLD = 6;
static final int MIN_TREEIFY_CAPACITY = 64;
Mengapa dan bagaimana konstanta ini digunakan? Saya ingin beberapa contoh yang jelas untuk ini. Bagaimana mereka mencapai perolehan kinerja dengan ini?
Kedua
Jika Anda melihat kode sumber HashMap
di JDK, Anda akan menemukan kelas dalam statis berikut:
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;
}
}
//...
}
Bagaimana cara menggunakannya? Saya hanya ingin penjelasan tentang algoritmanya .
String
, memiliki ruang nilai yang jauh lebih besar daripadaint
kode hash, oleh karena itu, tabrakan tidak dapat dihindari. Sekarang tergantung pada nilai aktual, seperti nilai aktualString
, yang Anda masukkan ke dalam peta, apakah Anda mendapatkan distribusi yang merata atau tidak. Distribusi yang buruk bisa jadi hanya karena kesialan.