我有一個映射列表,並且在for循環中我想將一個Map添加到列表中。我聽說使用map.clear()比創建一個新的Map有更好的性能,但是我的問題是List.add()與對象的引用一起工作,並且通過使用Map.clear()引用不會被清除。通過值而不是引用在Java中添加到列表中
是否有可能強制List.add()使用該值或構建其他解決方法?
我有一個映射列表,並且在for循環中我想將一個Map添加到列表中。我聽說使用map.clear()比創建一個新的Map有更好的性能,但是我的問題是List.add()與對象的引用一起工作,並且通過使用Map.clear()引用不會被清除。通過值而不是引用在Java中添加到列表中
是否有可能強制List.add()使用該值或構建其他解決方法?
通過簡單地創建Map
的副本並插入副本,可以插入「按值」。問題在於它根本不是最優化的。
而不是簡單地創建一個新的空0123,,您創建一個填充Map
的副本並清除原始Map
。這意味着:您不會避免創建新對象的開銷,而且還會引入複製和清除已填充的Map
的額外工作。
而在一般的優化小紙條:
這是〜你的代碼,會做的工作的90%(是的,這些數字都是編造的,但它是想優化的常用方法的10%並且至少接近現實)。不要在第一次運行時過度優化代碼。只要做一些簡單的事情,不要讓代碼不易讀,運行一個分析器,尋找代碼的瓶頸並優化它們。這比優化整個代碼要高效得多。
如果您經常重複使用相同的地圖,清除它並非拋棄舊地圖以建立新地圖是有意義的。
但是在這裏,您不想重複使用相同的地圖,因爲您想將其存儲在列表中。如果您想清除它以便重複使用它,則必須將該地圖的副本添加到列表中才能擁有獨立的地圖。哪一個具有更好的性能是低級別的優化。你不應該擔心的,除非:
你應該只使用什麼與您的項目編碼規則更清晰/一致。我會在每次迭代中創建一個全新的地圖,但這只是我的看法。但是請不要在早期開發階段進行低級優化。
如果你在地圖上調用clear(),它應該擦除所有東西。這是你想要的,還是你想要一個原始地圖的副本? –
「我聽說使用map.clear()比創建新的Map有更好的性能」 - 這聽起來像是一種微型優化,除非有經過驗證的理由,否則不應該擔心。 – bradimus
相關:http://stackoverflow.com/questions/6757868/map-clear-vs-new-map-which-one-will-be-better – px06