Can an array be used as a HashMap key?

arrays, hashmap, java, key

Solution

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"));

Problem

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"}); ```

Original source