2011-03-17 51 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接口的实现类。