Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
为什么HashMap中的entryset调用entryset0而不是直接写
Set <Map.Entry <K, V >> es = entrySet; ! return es = null es: (entrySet = new EntrySet ());
在writeObject方法中直接调用entrySet0,是不是因为entrySet方法可以被覆盖的原因?
你的解释最靠谱。这是为了将 HashMap 的实现与有人entrySet()在子类型中覆盖该方法的影响隔离开来。
entrySet()
我能想到的唯一其他解释是,这是该类的某个旧版本遗留下来的,我不希望 Java 开发人员会在这里发生这种情况。(这是代码上有很多眼球......)
无论哪种方式,它可能对性能没有影响。JIT 编译器可能会内联调用 ... 除非有子类HashMap会覆盖entrySet()。
HashMap