Rumah > Soal Jawab > teks badan
Persekitaran: jdk1.8
Masalah: Semasa mempelajari HashMap, saya mendapati kaedah afterNodeInsertion dipanggil pada penghujung kaedah putVal
...
++modCount;
if (++size > threshold)
resize();
afterNodeInsertion(evict);
return null;
Saya mencari kaedah afterNodeInsertion sekali lagi dan mendapati ia dipanggil di banyak tempat, tetapi pelaksanaannya adalah
void afterNodeInsertion(boolean evict) { }
Kaedah kosong? ? Ingin tahu apakah kaedah ini?
淡淡烟草味2017-05-17 10:05:41
// Callbacks to allow LinkedHashMap post-actions
void afterNodeAccess(Node<K,V> p) { }
void afterNodeInsertion(boolean evict) { }
void afterNodeRemoval(Node<K,V> p) { }
Malah, telah disebut dalam kod sumber bahawa ketiga-tiga kaedah ini semuanya untuk mewarisi perkhidmatan kelas LinkedHashMap
HashMap
. HashMap
的LinkedHashMap
类服务的。
LinkedHashMap
是HashMap
的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用LinkedHashMap
。
LinkedHashMap
中被覆盖的afterNodeInsertion
🎜KaedahLinkedHashMap
ialah subkelasHashMap
, yang mengekalkan susunan sisipan Jika susunan output perlu sama dengan susunan input, kemudian gunakanLinkedHashMap
. 🎜
afterNodeInsertion
yang diganti dalam LinkedHashMap
digunakan untuk memanggil semula dan mengalih keluar objek terawal yang diletakkan dalam Map🎜
void afterNodeInsertion(boolean evict) { // possibly remove eldest
LinkedHashMap.Entry<K,V> first;
if (evict && (first = head) != null && removeEldestEntry(first)) {
K key = first.key;
removeNode(hash(key), key, null, false, true);
}
}