List subList()
一见到这个方法,就很容易想起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...
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
