亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Map.ofEntries()創建的Map的訪問時間復雜度與O(1)的HashMap相同嗎?

Map.ofEntries()創建的Map的訪問時間復雜度與O(1)的HashMap相同嗎?

收到一只叮咚 2023-08-16 09:57:03
我想使用 Java 9 中的新工廠方法創建一個不可變的 hashMapMap.ofEntries()內聯,例如:Map<Integer,?String>?map?=?Map.ofEntries( ????Map.entry(1,?"One"), ????Map.entry(2,?"Two"), ????Map.entry(3,?"Three"));然后令我驚訝的是,我發現我無法以同樣的方式創建不可變的 hashMap!例如,以下代碼將不起作用。HashMap<Integer,?String>?map?=?HashMap.ofEntries(?//not?work ????Map.entry(1,?"One"), ????Map.entry(2,?"Two"), ????Map.entry(3,?"Three"));然后,當我想檢查工廠方法返回什么類型的地圖時,我發現了以下注釋:調用者不應對返回實例的身份做出任何假設。所以我的問題是,不可變映射的訪問時間復雜度與 o(1) 的 hashMap 相同嗎?如果不是,如何創建一個既不可變又同時訪問 o(1) 的映射?如果可以內聯創建那就最好了。
查看完整描述

1 回答

?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

可變性或不變性與 中訪問操作的復雜性沒有直接關系Map。例如, aHashMap將始終用于O(1)操作get(),而 aTreeMap將始終用于O(log n)。接口的實現Map決定了操作的復雜程度。

此外,始終可以創建不可修改的映射,因為在將Map項目放入任何具體類型之后,我們可以使任何具體類型不可變,如下所示:

Map<Integer,?String>?immutableMap?=?Collections.unmodifiableMap(mutableMap);

需要明確的是,這是HashMap.ofEntries()行不通的,因為該ofEntries()方法是靜態的并且是在Map接口中定義的,而不是在其任何實現類中定義的。

而且您不應該擔心無法將映射的類型聲明為HashMap或其他一些具體類,無論如何,最佳實踐是將映射聲明為接口的類型Map

另外,如果您使用的是 Java 9 之前的版本并且不介意使用外部庫,您可以ImmutableMap從 Guava 使用:

Map<Integer,?String>?immutableMap?=?ImmutableMap.of(key1,?val1,?key2,?val2);
查看完整回答
反對 回復 2023-08-16
  • 1 回答
  • 0 關注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號