Interesting Java Puzzler
Here's an interesting code puzzler I found on Alex Miller's technical blog:
<font color="#7f0055">import</font> java.util.HashMap;
<font color="#7f0055">import</font> java.util.HashSet;
<font color="#7f0055">import</font> java.util.Map;
<font color="#7f0055">import</font> java.util.Set;
<font color="#7f0055">import</font> java.util.concurrent.ConcurrentHashMap;
<font color="#7f0055">public class</font> EntrySetSize {
<font color="#7f0055">public static void</font> main(String[] args) {
printSetSize(<font color="#7f0055">new</font> ConcurrentHashMap());
printSetSize(<font color="#7f0055">new</font> HashMap());
}
<font color="#7f0055">private static void</font> printSetSize(Map map) {
map.put("<font color="#2a00ff">hello</font>", "<font color="#2a00ff">world</font>");
map.put("<font color="#2a00ff">world</font>", "<font color="#2a00ff">hello</font>");
Set set = <font color="#7f0055">new</font> HashSet(map.entrySet());
System.out.print(set.size() + " ");
}
}
The puzzle is to figure out what sequence of numbers this code will print when executed. Is it:
a) 2 2
b) 1 2
c) 0 2
d) something else
To find the answer (hint: it varies on different versions of the JDK) check out Alex's blog here.
He also has an excellent description of the puzzler's behavior.
-EJB

