第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java數(shù)組可以用作HashMap鍵嗎

Java數(shù)組可以用作HashMap鍵嗎

哈士奇WWW 2019-12-14 15:11:55
如果HashMap的鍵是字符串?dāng)?shù)組:HashMap<String[], String> pathMap;您可以使用新創(chuàng)建的字符串?dāng)?shù)組訪問地圖,還是必須是相同的String []對象?pathMap = new HashMap<>(new String[] { "korey", "docs" }, "/home/korey/docs");String path = pathMap.get(new String[] { "korey", "docs" });
查看完整描述

3 回答

?
LEATH

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



查看完整回答
反對 回復(fù) 2019-12-16
?
千萬里不及你

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”。



查看完整回答
反對 回復(fù) 2019-12-16
?
千巷貓影

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 []來自用戶輸入),請使用列表。



查看完整回答
反對 回復(fù) 2019-12-16
  • 3 回答
  • 0 關(guān)注
  • 351 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號