java - Apakah peranan kaedah afterNodeInsertion dalam HashMap?
仅有的幸福
仅有的幸福 2017-05-17 10:03:41
0
1
998

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?

仅有的幸福
仅有的幸福

membalas semua(1)
淡淡烟草味
// 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. HashMapLinkedHashMap类服务的。

LinkedHashMapHashMap 的一个子类,它保留插入的顺序,如果需要输出的顺序和输入时的相同,那么就选用 LinkedHashMap

LinkedHashMap中被覆盖的afterNodeInsertion

LinkedHashMap ialah subkelas HashMap, yang mengekalkan susunan sisipan Jika susunan output perlu sama dengan susunan input, kemudian gunakan LinkedHashMap . 🎜
🎜Kaedah 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);
    }
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan