從記憶的角度來看哪一個更好String[]/List<String>
。我有5000
或更多的對象需要存儲哪些我作爲服務的迴應。從記憶的角度來看哪一個更好String [] /列表<String>
回答
如果依賴於您詢問的List實現。如果您詢問String []與ArrayList,他們使用相同數量的存儲,因爲ArrayList由數組支持(差異將取決於您初始化數組的長度與您啓動ArrayList的初始容量用)。
爲了使用String [],您必須知道需要存儲的字符串的最大數量,因爲數組的legnth是固定的。 ArrayList會在必要時自動將數據複製到更大的數組。
簡單的對象在內存中總是更好。它高度依賴於您正在使用的列表。 LinkedList在內存方面比ArrayList更糟糕。你應該問自己的問題是你將如何與設置互動。 如果你想添加某物。在中間你應該使用LinkedList。 如果只有一組固定的字符串,則使用String []。 如果您只是添加更多和更多的字符串,請使用ArrayList。 你不應該擔心內存使用,因爲有很多。
也許你應該去ArrayList<String>
。
內存消耗取決於List
的類型,並且坦率地說,只有5000個對象依然不重要。
ArrayList<String>
只比String[]
稍微「惡化」。 ArrayList<String>
只是打包並管理一個Object[]
,給每個對象和每個增長閾值帶來開銷。 Object[]
是多大並不重要。而且,無論您是否使用它,Object[]
中的每個條目通常都是4個字節,因爲Java是通過引用的。所以這就像20kB。在大多數使用Java的環境中,這並不重要。
如果使用LinkedList<String>
,內存消耗會更多,因爲對於每個條目,都會有一個額外的Node
對象。但這仍然不重要。我們假設每個Node
對象的大小爲20字節(hashCode,class,list,next,previous)。那麼我們正在談論100 kiB。
在手機上1 GiB RAM的情況下,對手機上的大多數應用程序已經不重要。在8 GiB或16 GiB的PC上,你真的不想介意。
我通常會去ArrayList<?>
,但如果我刪除,並經常添加的電流回路元件,並且不需要隨機訪問,然後我去LinkedList<?>
,或CopyOnWriteArrayList<?>
如果我需要,我可以讀取和修改的列表從多個線程同時進行,列表不會變得太大或者寫入很少。
String[]
和List<String>
都在內存中佔用相同的空間來存儲數據。
String[]
- 您需要知道有多少元素存儲在您的內存中,並且它不應該是最小或不是最大空間,那麼所需的空間。
List<String>
- 它有自己的調整大小的好處,指定一定的大小到您的列表中,以防指定的大小變小,無需更改代碼。和List
集合更容易進行進一步操作。
- 1. 從性能的角度來看,哪一個更好?數列或數組?
- 2. 哪種編程風格更好?從優化的角度來看
- 3. 哪一個更有記憶效率?
- 4. 哪一個是更快的字符串[]或列表<string>
- 5. 一個更好的方法來轉換文件`[]``到列表<String>`
- 6. C「string」init - 哪個更好?
- 7. 從列表返回一個匹配<KeyValuePair <string,string >>
- 8. 從性能角度來看,還有哪些更有優勢?
- 9. 爲什麼一個循環比其他記憶更好地表現得更好?
- 10. 如何從列表<String>獲取最大長度記錄?
- 11. 創建的String []動態地從一個列表<String>
- 12. 從前端角度來看?
- 13. 哪個更好:用戶界面角度還是智能表格角度?
- 14. 哪一個更好?
- 15. 從性能角度來看,Android活動之間的哪個對象傳遞選項更好?
- 16. 速度表從地圖<字符串,列表<String>>
- 17. 從列表中獲取唯一值<Dictionary <string,string >>
- 18. 如何從一個給定的角度來看
- 19. 最好的方法來存儲csharp中的<string,string>列表
- 20. 更好的方式來使用IEnumerable <IEnumerable <string>>
- 21. 記憶化列表ocaml的
- 22. 更好的方式來遍歷列表<String>並刪除項目
- 23. 哪個更好,「var array = ...」或「string [] array = ...」?
- 24. 從另一個過濾一個列表<string>通過LINQ
- 25. 從性能的角度來看,使用常量來表示語言文件是一個好主意?
- 26. 更快的方式來搜索一個C#列表<String>的子串
- 27. 哪一個更好?
- 28. C#重新排序列表<string>基於另一個列表<string>
- 29. 檢查列表<string>是否包含在另一個列表<string>
- 30. 多個列表<String>在一行
[數組或列表在Java中的可能重複。哪個更快?](http://stackoverflow.com/questions/716597/array-or-list-in-java-which-is-faster) – Andy
我不認爲這個問題與內存泄漏問題相關。 – Szarpul