forEach on HashMap and IdentityHashMap (original) (raw)

Remi Forax forax at univ-mlv.fr
Wed Jun 12 09:28:22 UTC 2013


On 06/12/2013 10:20 AM, Paul Sandoz wrote:

On Jun 12, 2013, at 9:45 AM, Peter Levart <peter.levart at gmail.com> wrote:

On 06/11/2013 11:06 PM, Mike Duigou wrote: On Jun 11 2013, at 09:59 , Remi Forax wrote:

Hi guys, This mail was originality sent to lambda-lib EG but Brian ask me to also send it here to not forget.

We should provide an implementation of forEach for HashMap that avoid to create an Iterator, HashMap is too common to not have it's dedicated implementation I assume you mean the forEach on the entrySet. (ArrayList by example has its own implementation of forEach). There is also another implementation that should have a specific implementation IdentityHashMap because entrySet() creates map entries on the fly so having a specific implementation that will not allocatin entries will improve performance (a lot for big identity hashmap). Are you suggesting adding a IdentityMap.forEach(BiConsumer) or re-using the Map.Entry passed to the consumer in entrySet().forEach(Consumer)? That's a very good idea. Why not adding the following default method to Map interface: default void forEach(BiConsumer<? super K, ? super V> sink) { for (Map.Entry<K, V> entry : entrySet()) { sink.apply(entry.getKey(), entry.getValue()); } } It's already there :-) http://download.java.net/jdk8/docs/api/java/util/Map.html#forEach(java.util.function.BiConsumer) Just need some Map impls to override it. I logged a bug, JDK-8016446, to track it. Paul.

Thanks Paul, By the way, could you add to the description of the bug that if we override Map.forEach for HashMap we also need to override it for LinkedHashMap.

Rémi

...and override it in IHM, HM/LHM, CHM with optimal implementations...

Regards, Peter

Mike

cheers, Rémi



More information about the core-libs-dev mailing list