For completeness here's a tester. (it passes on the above code) public static void main(String[] args) { System.out.println("Run this with vm arg: -ea"); System.out.println("Running test..."); FixedHashMap<String,Object> recMap1 = new FixedHashMap<String, Object>(); recMap1.put("me", recMap1); FixedHashMap<String,Object> recMap2 = new FixedHashMap<String, Object>(); recMap2.put("me", recMap2); HashMap<Object,Object> containerMap = new HashMap<Object, Object>(); containerMap.put(recMap1, null); // <---- causes a stack overflow if recMap1 is a regular HashMap with recursion containerMap.put(recMap2, null); System.out.println("assertions..."); assert recMap1.equals(recMap1); assert false == containerMap.equals(recMap1); assert false == recMap1.equals(containerMap); assert containerMap.equals(containerMap); assert recMap1.equals(recMap2); assert containerMap.size() == 1; System.out.println(containerMap.toString()); System.out.println("Done"); }
-- http://groups.google.com/group/Google-Web-Toolkit-Contributors