黑马程序员技术交流社区

标题: 集合问题 [打印本页]

作者: 黑马伍仪华    时间: 2012-3-6 20:20
标题: 集合问题


List<Object> lists = new ArrayList<Object>();

        lists.add("1");
        lists.add("2");
        lists.add("3");
        lists.add("4");

        List<Object> tempList = lists.subList(2, lists.size());

        tempList.add("6");

        System.out.println(tempList); // 1

        System.out.println(lists); // 2


代码初步写好后,可能我们想达到的效果是:往集合lists的子集合tempList中添加一个元素6,而原有的集合保持不变。

即到达这样的效果:lists = [1, 2, 3, 4],tempList = [3, 4, 6]。但是我们看到实际的结果确是lists里边也添加了元素6。
这是怎么一会事呢


作者: 马胜平    时间: 2012-3-6 20:36
本帖最后由 马胜平 于 2012-3-6 20:40 编辑

subLiist并没有改变原来的列表,看文档说明:返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图
返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。
必须再加条语句  tempList=new ArrayList(temptList)
当我们使用子集合tempList进行元素的修改操作时,会影响原有的list集合。所以在使用subList方法时,一定要想清楚,是否需要对子集合进行修改元素而不影响原有的list集合。
作者: 泮和顺    时间: 2012-3-6 20:40
API中明确有subList()返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中; 如果想要那个效果不要用这个序列化的LIST<E>这个接口类 直接用List就好了
作者: 小白    时间: 2012-3-6 21:08
List<E> subList(int fromIndex,
                int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。(如果 fromIndex 和 toIndex 相等,则返回的列表为空)。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。
此方法省去了显式范围操作(此操作通常针对数组存在)。通过传递 subList 视图而非整个列表,期望列表的任何操作可用作范围操作。例如,下面的语句从列表中移除了元素的范围:

            list.subList(from, to).clear();
看不懂给我留言!
作者: 黄秋    时间: 2012-3-7 02:05
马胜平 发表于 2012-3-6 20:36
subLiist并没有改变原来的列表,看文档说明:返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之 ...

加条语句 tempList=new ArrayList(temptList) 不行呀,而tempList = new ArrayList() 只是清空 list.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2