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

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

如何保留 Map.of 工廠中的插入順序?

如何保留 Map.of 工廠中的插入順序?

Cats萌萌 2021-09-12 14:34:00
Java 9 提供Map.of()了輕松創建具有固定值的地圖的功能。問題:我想創建一個保留插入順序的映射,例如LinkedHashMap. 那家工廠可以嗎?至少map.of()不保留順序...
查看完整描述

3 回答

?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

LinkedHashMap::of確實沒有工廠方法,而且 aMap本身沒有訂單,所以我認為它的唯一方法是構建一個,LinkedHashMap如果你真的需要的話。

順便說一句,來自JEP 本身

具體集合類(例如,ArrayList、HashSet)上的靜態工廠方法已從該提案中刪除...

還有一個問題,就是類上的靜態方法是由子類繼承的。假設要添加一個靜態工廠方法 HashMap.of()。由于 LinkedHashMap 是 HashMap 的子類,因此應用程序代碼可以調用 LinkedHashMap.of()。這最終會調用 HashMap.of(),這完全不是人們所期望的!

這里的static要點是方法是繼承的,但不是可HashMap覆蓋的,因此如果將這樣的方法添加到它可能不會在LinkedHashMap.

如果可以使用guava,則可以使用ImmutableMap記錄為:

一個不可變的、基于哈希的 Map,具有可靠的用戶指定的迭代順序......


查看完整回答
反對 回復 2021-09-12
?
弒天下

TA貢獻1818條經驗 獲得超8個贊

正如Map(重點是我的)的 Java apidoc 中所述:

不可修改的地圖

Map.of,Map.ofEntriesMap.copyOf靜態工廠方法提供了一種方便的方法來創建不可修改的地圖。這些方法創建的 Map 實例具有以下特點:

  • ...

  • 映射迭代順序未指定并且可能會發生變化。

  • ...

不幸的是,Java API 中沒有等效的便捷方法來創建LinkedHashMap. 如果您想要一致的迭代順序,那么您將需要手動創建LinkedHashMap并填充它(并且 - 如果需要 - 使用 包裝它Collections.unmodifiableMap)。

考慮創建您自己的便捷方法,該方法等效于Map.of但具有一致的迭代順序(或找到已經提供此功能的現有庫)。



查看完整回答
反對 回復 2021-09-12
  • 3 回答
  • 0 關注
  • 254 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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