Kor*_*ton 25 java arrays hashmap
如果HashMap的键是一个字符串数组:
HashMap<String[], String> pathMap;
Run Code Online (Sandbox Code Playgroud)
您可以使用新创建的字符串数组访问地图,还是必须是相同的String []对象?
pathMap = new HashMap<>(new String[] { "korey", "docs" }, "/home/korey/docs");
String path = pathMap.get(new String[] { "korey", "docs" });
Run Code Online (Sandbox Code Playgroud)
Ted*_*opp 39
它必须是同一个对象.甲HashMap比较了使用键equals()和在Java中两个数组仅当它们是相同的对象相等.
如果你想要的值相等,然后写一个包装了自己的容器类String[],并提供了相应的语义equals()和hashCode().在这种情况下,最好使容器不可变,因为更改对象的哈希代码会对基于哈希的容器类造成严重破坏.
编辑
正如其他人所指出的那样,List<String>你似乎想要一个容器对象的语义.所以你可以这样做:
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"));
Run Code Online (Sandbox Code Playgroud)
不,但你可以使用List<String>哪个将按预期工作!
Java 中的数组使用Object'shashCode()且不覆盖它(与equals()and相同toString())。所以不,你不能不使用数组作为哈希映射键。
| 归档时间: |
|
| 查看次数: |
34162 次 |
| 最近记录: |