2010-12-18 78 views

回答

1

假設你指的是接口的實現,像get()和size()這樣的方法使用int,所以理論上邊界將是Integer.MAX_VALUE條目。儘管如此,在達到此限制之前,您可能會用盡內存!

Java arrays中的索引類型也是int,因此您肯定受限於常規數組的Integer.MAX_VALUE條目。

+2

由於Java不提供未簽名的整數,所以我沒有看看任何實現可以提供多於2^31-1。 – Gabe 2010-12-18 06:22:31

+0

@Gabe是正確的,雖然你可以用get(int)做一些明智的事情,但size()對於負數不會有多大意義。我會更新我的答案 – 2010-12-18 06:25:17

1

如果你正在談論一個ArrayList,它們使用整數(總是用Java簽名)進行索引,所以它們理論上可以保存2^31個元素(而不是2^32)。那時你可能會遇到內存問題。

+1

@Matt - 除非我錯了,它們將在'0..2^31-1'範圍內,這仍然是'2^31'總元素 – 2010-12-18 06:28:36

+0

是的,[你'完全正確](http://download.oracle.com/javase/6/docs/api/java/lang/Integer.html#MAX_VALUE)。抱歉!在睡眠不足的時候,我不需要這麼做。 – 2010-12-18 06:47:28

+0

我不擔心內存問題。如果我的64位筆記本電腦帶有4GB內存(允許任何進程輕鬆適合工作集中超過2^31字節的數組),32GB桌面很容易想象,256GB服務器很快就會普及。 – Gabe 2010-12-18 06:59:06

1

LinkedList也是List的實現,它將元素存儲爲鏈接列表。所以理論上它的大小等於你可以分配的內存量。

+0

我並不完全同意。 java.util.List接口將索引類型修復爲int,所以像size(),get(int),set(int,E),add(int,E)和remove(int)這樣的操作對列表來說是沒有意義的與超過Integer.MAX_VALUE元素。 – 2010-12-18 06:32:47