与ArrayList和List的区别

sat*_*esh 1 java

嗨我在这里尝试从列表中对项目进行子列表,并为每次迭代打印5个项目.在下面的代码中,它每次都打印相同的项目

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

 }
Run Code Online (Sandbox Code Playgroud)

但是在这里它打印不同的项目,就像每次从列表中删除5一样

 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);
 }
Run Code Online (Sandbox Code Playgroud)

上面两个代码片段之间有什么区别

Dav*_*ton 8

您应该阅读API for List.

返回的列表由此列表支持,因此返回列表中的非结构更改将反映在此列表中,反之亦然.

因此,在每种情况下,您创建的列表不是原始列表中元素的新副本,而只是原始列表的视图.在第二个示例中,您在新列表上调用clear,这实际上是清除原始列表中的元素,因此您看到的行为.