簡體   English   中英

將不可變轉換為可變 map java

[英]Converting immutable to mutable map java

我有一個不可變的 map,我從另一部分的方法中得到。 在處理時,我想從中刪除一個密鑰,然后進一步使用它,該密鑰始終位於 map 上。

    ImmutableMap<String, Object> immutableMap =  doSomethingAndGetImmutableMap();
    
    // convert to mutable
    Map<String, Object>  newMutableMap =  ??

    newMutableMap.remove("pin");
   
    // other code

是否有任何內置方法可以將不可變轉換為可變 map java? 我看到有幾種相反的方法,但不是從不可變到可變 map。

我使用 Maps.newHashMap 但它是最好和最有效的方法嗎?

您可以使用復制構造函數從現有的Map簡單地創建一個新的HashMap

 HashMap<String, Object> = new HashMap<>(immutableMap);

請注意,這是一個全新的 object。 沒有辦法使不可變的 map 可變。 那將打破抽象。 我想從概念上講,您可以為不可變的 map 設計可變包裝器,該包裝器將更改存儲在第二個(私有)map 結構中。 但番石榴似乎並不支持這一點。


這是還是Maps.newHashMap性能更高?

Guava Maps.newHashMap(map)只返回new HashMap<>(map) 該調用將由 JIT 編譯內聯,因此一旦代碼被 JIT 編譯,現代 JVM 的性能差異應該為零。

你幾乎肯定是在浪費你的時間來微優化這種東西:

  • 您應該首先設計和編寫應用程序代碼並讓它工作。
  • 然后你對它進行基准測試。
  • 然后,您從基准測試結果中決定應用程序是否需要優化。
  • 然后你分析它以確定性能熱點在哪里。
  • 然后優化性能熱點。

除非有什么非常奇怪的事情,否則按照上述程序會導致你不會浪費時間問這個問題。 套用1 Donald Knuth:

“過早的優化是萬惡之源”


1...過度簡化/斷章取義...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM