2015-01-16 31 views
0

從記憶的角度來看哪一個更好String[]/List<String>。我有5000或更多的對象需要存儲哪些我作爲服務的迴應。從記憶的角度來看哪一個更好String [] /列表<String>

+1

[數組或列表在Java中的可能重複。哪個更快?](http://stackoverflow.com/questions/716597/array-or-list-in-java-which-is-faster) – Andy

+0

我不認爲這個問題與內存泄漏問題相關。 – Szarpul

回答

2

如果依賴於您詢問的List實現。如果您詢問String []與ArrayList,他們使用相同數量的存儲,因爲ArrayList由數組支持(差異將取決於您初始化數組的長度與您啓動ArrayList的初始容量用)。

爲了使用String [],您必須知道需要存儲的字符串的最大數量,因爲數組的legnth是固定的。 ArrayList會在必要時自動將數據複製到更大的數組。

1

簡單的對象在內存中總是更好。它高度依賴於您正在使用的列表。 LinkedList在內存方面比ArrayList更糟糕。你應該問自己的問題是你將如何與設置互動。 如果你想添加某物。在中間你應該使用LinkedList。 如果只有一組固定的字符串,則使用String []。 如果您只是添加更多和更多的字符串,請使用ArrayList。 你不應該擔心內存使用,因爲有很多。

1

也許你應該去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<?>如果我需要,我可以讀取和修改的列表從多個線程同時進行,列表不會變得太大或者寫入很少。

0

String[]List<String>都在內存中佔用相同的空間來存儲數據。

String[] - 您需要知道有多少元素存儲在您的內存中,並且它不應該是最小或不是最大空間,那麼所需的空間。

List<String> - 它有自己的調整大小的好處,指定一定的大小到您的列表中,以防指定的大小變小,無需更改代碼。和List集合更容易進行進一步操作。

相關問題