List subList()

来源:互联网 发布:sql developer 编辑:程序博客网 时间:2024/05/18 02:08

一见到这个方法,就很容易想起String subString方法。

但是使用这个方法注意了:

当List Father如果使用subList,生成List children。

但是如果我们接下来对List Father再次进行操作,如添加,List children也会跟着添加该元素。remove是一样的。

例:

public class SubListDemo{    public static void main(String[] args)    {        System.out.println("---------------ArrayList------------");        subListTest(new ArrayList<Integer>());        System.out.println("---------------LinkedList------------");        subListTest(new LinkedList<Integer>());    }     private static void subListTest(List<Integer> list)    {        if(list == null)        {            throw new IllegalArgumentException("Argument " + list + " is null.");        }        for(int i = 0; i<5; i++)        {            list.add(i);        }                 List<Integer> subList = list.subList(2, list.size());        // 期望输出和实际输出一致,都是[0, 1, 2, 3, 4]        System.out.println("Original list: " + list);         // 期望输出和实际输出一致,都是[2, 3, 4]        System.out.println("Sublist:       " + subList);                 subList.add(10);        // 但这里,实际输出结果却可能会出乎我们的意料,我们可能会认为输出结果不变, // 但却发现实际输出结果竟然变化了,比原先多了个元素10,变为 [0, 1, 2, 3, 4, 10]        System.out.println("Original list: " + list);        // 期望输出和实际输出一致,都是[2, 3, 4, 10]        System.out.println("Sublist:       " + subList);    }}

如果想要避免这种情况,直接new一个Lists.newArr...

0 0