vector v = new vector();
for(int i=0;i<10;i++)
v.add(new integer(i));
enumeration e = v.elements();
while(e.hasmoreelements())
system.out.println(v.size());
如果沒去執行這段程式,可能有的人會認為
system.out.println(v.size());
輸出來的是0,但實際上是5,為什麼會這樣的呢?
在回答這個問題前,我們先看看2段**
public enumerationelements()
public e nextelement()
}throw new nosuchelementexception("vector enumeration");}};
}
上面這段**就是v.elements()**
public synchronized void removeelementat(int index)
else if (index < 0)
int j = elementcount - index - 1;
if (j > 0)
elementcount--;
elementdata[elementcount] = null; /* to let gc do its work */
}
上面這段**,就是v.remove(object o)的主核心**
分析:先看第一段**:
從**中,我們得知enumenation.nextelement 會將指標下劃到下乙個元素
在看第二段**:
從**中,我們得知v.remove 進行操作時,是將後面的陣列覆蓋掉 所要刪除元素的位置,最後乙個則用null
現在我們理順下思路吧,
v 裡面存放的數是 0 1 2 3 4 5 6 7 8 9
首先e.nextelement() 指標所在位置就是 0,也就是陣列的第乙個索引
當我們進行v.reomve的時候,後面的陣列覆蓋了前面的陣列
v.remove 處理完後: 1 2 3 4 5 6 7 8 9
這時候,進入下次迴圈
e.nextelement() 這時候的指標位置就是 2, 而漏過了 1 這個資料,
迴圈結束後,就漏掉了5個數,
所以,大家在做這樣的remove的時候,需要特別注意下
python中一切皆物件 Python中一切皆物件
1.python一切皆物件函式和類也是物件,屬於python的一等公民,體現在以下四點 1.賦值給乙個變數 將函式賦值給乙個變數,對這個變數的操作實際上就是對這個函式的操作def say name superzjx print name my func say my func superzjx cl...
工作中一些工具的使用!
工作中經常會用到壓縮跟替換命令,用到的時候網上查一下,用完也就忘了。對於工具我的態度是 會用就好。但經常的查詢搜尋搞的我也很煩,還是做個筆記吧,自己做的也是最適合自己的,等以後什麼也記不住了,至少還有存世的東西。嘻嘻 將當前目錄下所有檔案壓縮成rootfs.tar.bz2 tar tar jcvf ...
Hudson使用中一些注意事項
hudson使用中一些注意事項 老寅的地盤 iteye技術 最近在使用hudson做持續整合,使用中發現幾個問題,在這裡做下備忘,可以方便以後的使用 1.當使用hudson的時候,會出現硬碟空間不夠的情況,這是因為,hudson會記錄歷史整合記錄,這些記錄,非常占用空間,為了比較這種情況,需要在hu...