2011-04-15 77 views
0

我正在填充一個ArrayList的點數。向ArrayList添加單個元素會添加另外11個空元素?

對我來說,這看起來很簡單,但在運行之後,ArrayList中有空元素。

for(int i =0; i< currentt.getPointCount();i++){ 
    File pXml = new File(tourFolderPath + "point_" + (i+1) +".xml"); 
    if (pXml.exists()){ 
     pt = (Point)MXP.createObject(pXml, 2); 
    } 
    pts.add(pt); 
} 

在調試器中檢查後,它似乎是第一次行「pts.add(pt);」運行它會添加一個合法的點元素。但是,它也增加了10個其他的空元素。

任何想法?

+0

數組列表是如何創建的?你能提供更多的來源嗎? – 2011-04-15 12:07:21

回答

6

一種ArrayList含有10

+0

調試器會報告大量的空值,但只有在您需要稍後添加更多元素時纔會保存。它們不能通過ArrayList的接口訪問。 – DavW 2011-04-15 12:09:37

+0

啊挺對的!好的,當我使用迭代器循環訪問列表時,問題在後來出現。使用pointItr.hasNext()對null元素返回true,從而導致後面的各種不協調。很明顯,我需要在使用迭代器之前擺脫那些空元素。 – digitalWestie 2011-04-15 12:29:55

1

的初始容量,它看起來像pXml.exists()true首次和false其他次。

無論如何,即使pXml不存在,您仍然可以添加pt

請顯示更多代碼。

+0

你對此絕對正確 - 好點。但我仍然有其他問題 – digitalWestie 2011-04-15 12:22:49

1

當您製作new ArrayList();時,它會創建一個初始容量等於10.您可以通過將int傳遞給構造函數來更改此行爲。閱讀更多here

2

如果通過調試看看ArrayList中,你可能看到它的支持數組,這陣是隻要的ArrayList 能力

備用數組有意地比當前插入的元素的數量多。這使得插入更快,因爲它不需要爲要求存儲的每個元素重新分配數組。

如果您查看ArrayList的size屬性,您可能會看到正確數量的元素。

2

我剛剛在調試器中運行了一個簡單的程序,您將看到每個人都在談論什麼。 初始化它會創建10個空條目。這些空條目不可訪問。 這就是爲什麼如果添加元素的大小顯示爲0。 ,規模將更改爲1
Screenshot of ArrayList in debugger, indicating the size as 0