关于容器的一个小程序

excellent_chen 2010-09-22 12:23:00
代码如下:

import java.util.*;

class Simple {
static int count ;
int id = count++;
public String toString (){
return "Simple " + id ;
}
}

public class E07_Containers {
public static void main(String[] args) {
Simple[] s = { new Simple(),new Simple(),new Simple(),new Simple() };
List<Simple> ss = Arrays.asList(s);
System.out.println(ss);
List<Simple> sub = ss.subList(0, 2);
System.out.println(sub);
sub.clear();
System.out.println(ss);
}
}


若运行会有异常,但将List<Simple> ss = new ArrayList<Simple>(Arrays.asList(s))后,结果正确,不明白为什么?
将sub.clear()注释掉的话,异常也会消失,为什么?
...全文
67 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
excellent_chen 2010-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiaochun91103 的回复:]

之所以有异常时因为List<Simple> sub = ss.subList(0, 2);这一句中其实并没有产生一个新的列表,此处的sub指向的还是原来的List ss,只不过sub是ss的一个子视图,还是指向ss,所以当你在下面sub.clear()之后,原来的ss List也会被clear()掉,所以在下面你再输出ss List的时候就出现错误了。


你可以结帖了。
[/Quote]
那如何解释 将List<Simple> ss = new ArrayList<Simple>(Arrays.asList(s))后,结果正确呢?
若鱼1919 2010-09-22
  • 打赏
  • 举报
回复
asList(T... a) 返回一个受指定数组支持的固定大小的列表。
xiaochun91103 2010-09-22
  • 打赏
  • 举报
回复
之所以有异常时因为List<Simple> sub = ss.subList(0, 2);这一句中其实并没有产生一个新的列表,此处的sub指向的还是原来的List ss,只不过sub是ss的一个子视图,还是指向ss,所以当你在下面sub.clear()之后,原来的ss List也会被clear()掉,所以在下面你再输出ss List的时候就出现错误了。


你可以结帖了。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧