2013-03-21 42 views
4

我知道列表使Java更容易,而不是使用硬性數組(列表允許您隨意添加/刪除元素,並自動調整大小等)。Java - 列表還是數組?

我讀過一些建議,應儘可能避免java中的數組,因爲它們根本不靈活(有時會施加奇怪的限制,例如如果您不知道數組的大小需要的大小等)。

這是「良好實踐」停止使用數組,而只使用List邏輯?我確信List類型比數組消耗更多的內存,因此具有更高的開銷,但這是否意義重大?大多數列表在運行時都會被GC調試過,如果它們留在任何地方,所以也許它不像我想的那麼大?

+3

除非你能證明它是重要的,否則它永遠不會有意義。 – 2013-03-21 17:49:41

+0

[大猩猩或鯊魚?](http://blog.stackoverflow.com/2011/08/gorilla-vs-shark/) – 2013-03-21 17:50:20

+1

如果你知道大小,並確定它不會改變,你可以使用數組。 – 2013-03-21 17:50:52

回答

5

我認爲一個好的經驗法則是使用Lists,除非你需要Array(出於內存/性能的原因)。否則Lists通常更容易維護,因此不太可能導致未來的錯誤。

列表在自動擴展方面提供了更多的靈活性/功能,所以除非您按下內存(並且無法承受列表創建的開銷),或者不介意在擴展/縮小時維護數組大小,我會推薦列表。

儘量不要對代碼進行過於細微的管理,而應將注意力集中在更明顯易讀的組件上。

9

我不喜歡教條。瞭解規則;知道什麼時候打破規則。

「從不」太強,尤其是涉及到軟件時。

ArraysLists都是GC的潛在目標,所以這是一種洗滌。

是的,你必須在開始之前知道數組的大小。對於你這樣做的情況,它沒有任何問題。

根據需要,使用java.util.Collectionsjava.util.Arrays類很容易來回移動。

2

這取決於列表。 A LinkedList可能只在需要時佔用空間,而ArrayList通常會在其容量達到時大大增加空間。在內部,ArrayList是使用數組實現的,但它是一個總是比你想要的大的數組。但是,由於它存儲引用,而不是對象,因此在大多數情況下,內存開銷可以忽略不計,我相信便利是值得的。

1

我不得不說我遵循這種使用集合框架的方法,否則我可能會使用數組。這些集合爲陣列提供了許多好處和便利,但是可能會有一些性能受到影響。

最好編寫易於理解且難以破解的代碼,數組要求您輸入大量的檢查代碼,以確保您不會訪問不應該存在的數組位數考慮到大多數時間表現不是問題,它不應該成爲一個問題。