2015-08-21 66 views
-1

標題幾乎說明了一切。我很難找到這方面的信息,所以我做了一些試驗和錯誤,我想我會在這裏分享我的結果。Java ArrayList是否支持稀疏標記?


從PHP背景來看,我期望Java的ArrayList類型支持稀疏指示。例如,在PHP中,我可以這樣做:

$test = array(
    "Item 1", 
    "Item 2", 
    "Item 3" 
); 

unset($test[1]); 

echo $test[2]; 

並返回「Item 3」。但是,當我在Java中嘗試類似的東西時:

ArrayList<String> test = new ArrayList<>(); 

test.add("Item 1"); 
test.add("Item 2"); 
test.add("Item 3"); 

test.remove(1); 

System.out.println(test.get(2)); 

我得到一個IndexOutOfBoundsException。看起來,當你刪除元素時,數組會被重新索引。也許我錯過了一些東西(我對Java很新),但是在我看來,如果你依賴於知道索引不會在元素被刪除時改變,那麼應該使用類似HashMap而不是ArrayList

+0

[相關問題](http://stackoverflow.com/questions/12626135/memory-efficient-sparse-array-in-java)。 –

+3

*「我很難找到關於這個的信息......」* - 您尋找有關Java類信息的第一個地方是Javadoc。 –

+0

根據文檔,remove()方法進一步刪除並移位每個尾隨值1的位置。也許你可以改爲將值設置爲null,或者在你的情況下是一個空字符串。 – redxef

回答

2

號爪哇ArrayList(每Javadoc中)

此類提供方法來操作在內部用於存儲列表中的陣列的大小。

而且每JLS-10.3. Array Creation

數組創建表達式指定單元類型,嵌套陣列的電平的數目,並且所述陣列的嵌套的水平中的至少一個的長度。該陣列的長度可用作爲final實例變量length

在Java中,一個通常將實施稀疏CollectionMap(像HashMap或可能LinkedHashMap)。

1

Java ArrayList是否支持稀疏索引?

javadoc這樣說:

每個ArrayList實例都有一個容量。容量是用於存儲列表中元素的數組大小。它總是至少與列表大小一樣大。

總是。

如果它總是(至少)與大小一樣大,那麼它不是稀疏的...按照定義。