If a HashMap
‘s key is a String[]
array:
HashMap<String[], String> pathMap;
Can you access the map by using a newly created String[]
array, or does it have to be the same String[]
object?
pathMap = new HashMap<>(new String[]{"korey", "docs"}, "/home/korey/docs"); String path = pathMap.get(new String[]{"korey", "docs"});
Advertisement
Answer
It will have to be the same object. A HashMap
compares keys using equals()
and two arrays in Java are equal only if they are the same object.
If you want value equality, then write your own container class that wraps a String[]
and provides the appropriate semantics for equals()
and hashCode()
. In this case, it would be best to make the container immutable, as changing the hash code for an object plays havoc with the hash-based container classes.
EDIT
As others have pointed out, List<String>
has the semantics you seem to want for a container object. So you could do something like this:
HashMap<List<String>, String> pathMap; pathMap.put( // unmodifiable so key cannot change hash code Collections.unmodifiableList(Arrays.asList("korey", "docs")), "/home/korey/docs" ); // later: String dir = pathMap.get(Arrays.asList("korey", "docs"));