On Sun, 20 Feb 2022 18:44:09 GMT, XenoAmess <d...@openjdk.java.net> wrote:
>> src/java.base/share/classes/java/util/IdentityHashMap.java line 281: >> >>> 279: * @throws NullPointerException if the specified map is null >>> 280: */ >>> 281: private IdentityHashMap(Map<? extends K, ? extends V> map, int >>> expectedSize) { >> >> Why are you writing a new constructor when you can just change the old call >> to `this(m.size());`? > >> @liach implementations `size()` seems O1, and returns a single int number >> field, but it actually defers in some Map implementations. > > @liach for example, in ConcurrentSkipListMap and ConcurrentHashMap, `size()` > function is far complicated than reading a field, thus calling it twice > meaninglessly is not a wise choice. Imo you should just remove the `if (expectedSize == 0)` check than using this somewhat ugly trick to avoid calling `size()` twice (the second call is only used for this relatively useless fast-path, especially for the concurrent collections you refer to) ------------- PR: https://git.openjdk.java.net/jdk/pull/7431