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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

紫衣仙女 2019-10-30 13:02:17
如果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 回答

?
天涯盡頭無女友

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超9個(gè)贊

它必須是同一對象。Java中HashMap使用equals()和的比較鍵只有在兩個(gè)對象相同的情況下才相等。


如果你想要的值相等,然后寫一個(gè)包裝了自己的容器類String[],并提供了相應(yīng)的語義equals()和hashCode()。在這種情況下,最好使容器不可變,因?yàn)楦膶ο蟮墓4a會(huì)對基于哈希的容器類造成破壞。


編輯


正如其他人指出的那樣,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-10-30
?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊

它必須是同一對象


有關(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)您在上面運(yùn)行時(shí),將打印“ docs”。


查看完整回答
反對 回復(fù) 2019-10-30
?
慕虎7371278

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超4個(gè)贊

在大多數(shù)情況下,如果數(shù)組內(nèi)的字符串不是病態(tài)的并且不包含逗號和空格,則可以將其Arrays.toString()用作唯一鍵。即你Map將是一個(gè)Map<String, T>。而數(shù)組的get / put myKeys[]將是


T t = myMap.get(Arrays.toString(myKeys));


myMap.put(Arrays.toString(myKeys), myT);

顯然,如果需要,您可以輸入一些包裝代碼。


一個(gè)不錯(cuò)的副作用是您的密鑰現(xiàn)在是不變的。當(dāng)然,您需要更改數(shù)組myKeys,然后嘗試使用a get(),但是找不到它。


字符串哈希得到高度優(yōu)化。因此,我的猜測是,這種解決方案盡管感覺有點(diǎn)慢且笨拙,但與使用不可變List的@Ted Hopp解決方案相比,將更快,更高效(更少的對象分配)。只要考慮一下Arrays.toString()您的密鑰是否唯一。如果不是,或者有任何疑問(例如String []來自用戶輸入),請使用列表。


查看完整回答
反對 回復(fù) 2019-10-30
  • 3 回答
  • 0 關(guān)注
  • 1181 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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