Java Puzzler on Arrays
Join the DZone community and get the full member experience.
Join For FreeToday, while working with arrays I came accross a Java puzzle which made me wonder WHY IS THIS PIECE OF CODE NOT WORKING?
Java Puzzle
Can you guess whether this Junit test case will pass?
@Test
public void testMapOfArray() {
Map<String[], String[]> map = new HashMap<String[], String[]>();
map.put(new String[] { "shekhar" },
new String[] { "I am Java Developer" });
map.put(new String[] { "rahul" }, new String[] { "I am C# Developer" });
String[] description = map.get(new String[] { "shekhar" });
assertThat(description[0], IsEqual.equalTo("I am Java Developer"));
}
Everytime I ran this test it failed with NullPointerException.
What's the reason for this unexpected behavior?
The problem is that String[] uses object identity for equals and hashcode methodsz. So,
String[] arr1 = new String[] { "shekhar" };
String[] arr2 = new String[] { "shekhar" };
will not match with eachother in a HashMap.
Advice
Don't use arrays as HashMap keys. If you want to use an array as a key, then write a wrapper arround an array and override equals and the hashcode method.
Opinions expressed by DZone contributors are their own.
Trending
-
Tomorrow’s Cloud Today: Unpacking the Future of Cloud Computing
-
Redefining DevOps: The Transformative Power of Containerization
-
Chaining API Requests With API Gateway
-
Cypress Tutorial: A Comprehensive Guide With Examples and Best Practices
Comments