java - Keraguan tentang indexFor(int h, int length) dalam HashMap
迷茫
迷茫 2017-05-17 09:59:13
0
1
710
 static int indexFor(int h, int length) {
        // assert Integer.bitCount(length) == 1 : "length must be a non-zero power of 2";
        return h & (length-1);
    }

HashMap akan mencincang nilai cincang kunci dan saiz tatasusunan Entri[] untuk mendapatkan kedudukan subskrip tatasusunan Entri saya baru mengetahui semasa penyahpepijatan bahawa terdapat dua kekunci yang berbeza (dengan nilai cincang yang berbeza), tetapi indeks yang diperolehi melalui indexFor Subskrip adalah sama, yang bermaksud bahawa dua nilai dengan nilai kunci yang berbeza dan nilai hash yang berbeza dirangkai bersama untuk membentuk senarai terpaut Saya masih ingat membaca artikel yang ditulis oleh orang lain sebelum ini, dan semuanya berkata bahawa nilai hash adalah sama, tetapi nilai utama adalah berbeza akan membentuk senarai terpaut, tetapi dalam penyahpepijatan sebenar, saya dapati hasil yang berbeza

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(1)
Ty80
Object (key) -> hashCode -> index

Objek yang berbeza mungkin mempunyai hashCode yang sama (yang seterusnya mestilah berbeza, melainkan hashCode atau equals ditakrifkan salah );
hashCode yang berbeza mungkin mempunyai indeks yang sama (yang seterusnya mestilah berbeza), dan hanya selepas itu senarai terpaut akan terbentuk. Object可能有相同的hashCode(反过来一定不同,除非hashCodeequals定义错了);
不同的hashCode可能有相同的index(反过来一定不同),这时才会形成链表。

这里的hashCode可能跟你看到的某些文章的hash

hashCode di sini mungkin tidak mempunyai maksud yang sama dengan hash dalam beberapa artikel yang anda telah lihat. 🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan