Puzzler: nested computeIfAbsent
 Overview  The Java 8 libraries have a new method on map, computeIfAbsent.  This is very useful way to turn your Map into a cache of objects associated with a key.   However, there is a combination you might not have considered; what happens if you call computeIfAbsent inside itself.   map.computeIfAbsent(Key. Hello , s -> {     map.computeIfAbsent(Key. Hello , t -> 1 );     return 2 ; });  enum Key { Hello }     While this might seem like a strange thing to do in simple cases, in more complex code you could do this by accident (as I did this afternoon)  So what happens?  Well it depends on the collection you are using.     HashMap: {Hello=2}   WeakHashMap: {Hello=2}   TreeMap: {Hello=2}   IdentityHashMap: {Hello=2}   EnumMap: {Hello=2}   Hashtable: {Hello=2, Hello=1}   LinkedHashMap: {Hello=1, Hello=2}   ConcurrentSkipListMap: {Hello=1}     ConcurrentHashMap:      Note: ConcurrentHashMap never returns.  It's locking doesn't appear to be re-entrant.     Co...