2011-03-17 34 views
1

嗨在這裏,我試圖從列表中列出項目,併爲每個迭代打印5。 這裏在下面的代碼是打印相同的項目每次與ArrayList和列表的區別

for(int i=0;i<4;i++) 
    { 
    List<Card> l=a.subList(a.size()-5, a.size()); 
    System.out.println(l); 

} 

但這裏是印刷不同的項目,就好像它是從列表中的每個時間

for(int i=0;i<4;i++){ 
    int deckSize = a.size(); 
    List<Card> handView = a.subList(deckSize-5, deckSize); 
    ArrayList<Card> hand = new ArrayList<Card>(handView); 
    handView.clear(); 
    System.out.println(hand); 
} 

之間有什麼區別除去5上面兩段代碼

+3

兩者都很奇怪。你想做什麼? – 2011-03-17 10:11:38

+0

這是你的'handView.clear();'去除了物品。 – asgs 2011-03-17 10:11:48

+0

第二個是我從教程中看到的...第一個我正在嘗試做 – satheesh 2011-03-17 10:16:38

回答

8

您應該閱讀API for List

返回的列表由該 列表支持,所以在 非結構性變化返回的列表將反映在此 列表中,並且反之亦然。

因此,在每種情況下,您創建的列表不是原始列表中元素的新副本,而只是原始列表中的一個視圖。在第二個示例中,您將在新列表中調用clear,這實際上是清除原始列表中的那些元素,因此您看到的行爲。

+1

對於該API文檔摘錄+1。 – asgs 2011-03-17 10:12:54

1

似乎對.subList()結果使用.clear()刪除返回的項目形成的原始列表

+0

我相信這是預期的行爲 – 2011-03-17 10:15:12

0

這是subList()的設計行爲。請參閱Javadoc for List.subList()

甚至有一個例子幾乎完全一樣。 (從視圖中刪除項目)

0

簽出subList的文檔。它返回一個由原始列表備份的列表,作爲視圖很有用。如果修改子列表,它將修改主列表。既然你清除了它的元素,原始列表也會被修改。

0

List is interface.ArrayList是List接口的實現類。

相關問題