A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 袁培育 中级黑马   /  2012-4-25 15:02  /  2733 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;
class CollectionsTest4
{
        public static void main(String[] args)
        {
                filldemo();
        }
        public static void filldemo()
        {
                List<String>list=new ArrayList<String>();
                list.add("aaaa");
                list.add("avc");
                list.add("put");
                list.add("nimei");
                list.add("bbb");
      
                List<String>ls=list.subList(1,4);
                System.out.println(ls);
                Collections.fill(ls,"pp");
                System.out.println(ls);
                list.addAll(ls);
                System.out.println(list);

        }
}

点评

list和ls 指向同一个对象了,第一个bb就可以解释,第二个应该懂吧  发表于 2012-4-25 17:26

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

5 个回复

倒序浏览
import java.util.*;
class CollectionsTest4
{
        public static void main(String[] args)
        {
                filldemo();
        }
        public static void filldemo()
        {
                List<String>list=new ArrayList<String>();
                list.add("aaaa");
                list.add("avc");
                list.add("put");
                list.add("nimei");
                list.add("bbb");
      
                List<String>ls=list.subList(1,4);
System.out.println("1"+list);//如果不懂可以这样验证
                System.out.println(ls);//ls获取子串结果为 avc put nimei
                Collections.fill(ls,"pp"); //替换后的结果为 pp pp pp
System.out.println("2"+list);//如果不懂可以这样验证
                System.out.println(ls);
                list.addAll(ls);//将指定 ls 中的所有元素都添加到此 list 中,因为你的LIST集合从始至终都只有一个,所以在替换子串LS的时候其实就替换了原有的list
                System.out.println(list);

        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 褚代江 于 2012-4-25 15:23 编辑

没有添加两次“pp”啊
执行结果是
[avc, put, nimei]
[pp, pp, pp]
[aaaa, pp, pp, pp, bbb, pp, pp, pp]
Collections.fill(ls,"pp");使用“pp”替换ls中的所有元素,所以ls的输出结果就是[pp, pp, pp]

list.addAll(ls);添加ls中的所有元素到list的结尾,此时list是[aaaa, pp, pp, pp, bbb],再加上ls的
[pp, pp, pp],就是结果[aaaa, pp, pp, pp, bbb, pp, pp, pp]了,其实有的方法忘了,翻翻Api就知道了,
同意的顶起啊{:soso_e113:}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
list.subList(1,4)
返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。(如果 fromIndex 和 toIndex 相等,则返回的列表为空)。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。
回复 使用道具 举报
嗯,楼上的2位解释的很好,定起。
那我把API补充上吧:

回复 使用道具 举报
public List<E> subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。(如果 fromIndex 和 toIndex 相等,则返回的列表为空)。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。

也就是说,不是添加了两次,而是fill看似在操作ls实际上是在操作list。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马