HashMap の entryset が、直接書き込むのではなく entryset0 を呼び出す理由
Set <Map.Entry <K, V >> es = entrySet;
! return es = null es: (entrySet = new EntrySet ());
writeObject メソッドで直接 entrySet0 を呼び出しているのは、entrySet メソッドをオーバーライドできるという理由によるものですか?
あなたの説明はもっともらしいです。entrySet()
これは、誰かがサブタイプのメソッドをオーバーライドした影響から HashMap の実装を隔離するためです。
私が考えることができる唯一の他の説明は、これがクラスの古いバージョンから残っているということであり、Java 開発者がここでそれを起こさせるとは思わなかったでしょう。(これはコードに多くの目玉があります...)
いずれにせよ、おそらくパフォーマンスに違いはありません。JITコンパイラは呼び出しをインライン化する可能性があります...オーバーライドするサブクラスがある場合を除きます。HashMap
entrySet()