3 回答

TA貢獻1936條經(jīng)驗 獲得超7個贊
它必須是同一對象。Java中HashMap使用equals()和的比較鍵只有在兩個對象相同的情況下才相等。
如果你想要的值相等,然后寫一個包裝了自己的容器類String[],并提供了相應(yīng)的語義equals()和hashCode()。在這種情況下,最好使容器不可變,因為更改對象的哈希碼會對基于哈希的容器類造成破壞。
編輯
正如其他人指出的那樣,List<String>具有您似乎想要的容器對象的語義。因此,您可以執(zhí)行以下操作:
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"));

TA貢獻1784條經(jīng)驗 獲得超9個贊
它必須是同一對象
有關(guān)信息,請參見此示例
public static void main(String[] args) {
HashMap<String[], String> pathMap;
pathMap = new HashMap<String[], String>();
String[] data = new String[] { "korey", "docs" };
pathMap.put(data, "/home/korey/docs");
String path = pathMap.get(data);
System.out.println(path);
}
}
當(dāng)您在上面運行時,將打印“ docs”。

TA貢獻1829條經(jīng)驗 獲得超7個贊
在大多數(shù)情況下,如果數(shù)組內(nèi)的字符串不是病態(tài)的并且不包含逗號和空格,則可以將其Arrays.toString()用作唯一鍵。即你Map將是一個Map<String, T>。而數(shù)組的get / put myKeys[]將是
T t = myMap.get(Arrays.toString(myKeys));
myMap.put(Arrays.toString(myKeys), myT);
顯然,如果需要,您可以輸入一些包裝代碼。
一個不錯的副作用是您的密鑰現(xiàn)在是不變的。當(dāng)然,您需要更改數(shù)組myKeys,然后嘗試使用a get(),但是找不到它。
字符串哈希得到高度優(yōu)化。因此,我的猜測是,這種解決方案盡管感覺有點慢且笨拙,但與使用不可變List的@Ted Hopp解決方案相比,將更快,更高效(更少的對象分配)。只要考慮一下Arrays.toString()您的密鑰是否唯一。如果不是,或者有任何疑問(例如String []來自用戶輸入),請使用列表。
添加回答
舉報