黑马程序员技术交流社区

标题: 代码题 为什么添加了两次“pp” [打印本页]

作者: 袁培育    时间: 2012-4-25 15:02
标题: 代码题 为什么添加了两次“pp”
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);

        }
}
作者: 攻城狮    时间: 2012-4-25 15:19
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);

        }
}
作者: 褚代江    时间: 2012-4-25 15:20
本帖最后由 褚代江 于 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:}


作者: chenwei    时间: 2012-4-25 15:28
list.subList(1,4)
返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。(如果 fromIndex 和 toIndex 相等,则返回的列表为空)。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。

作者: 王勃    时间: 2012-4-25 15:34
嗯,楼上的2位解释的很好,定起。
那我把API补充上吧:


作者: 丁佼    时间: 2012-4-25 17:07
public List<E> subList(int fromIndex, int toIndex)返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。(如果 fromIndex 和 toIndex 相等,则返回的列表为空)。返回的列表由此列表支持,因此返回列表中的非结构性更改将反映在此列表中,反之亦然。返回的列表支持此列表支持的所有可选列表操作。

也就是说,不是添加了两次,而是fill看似在操作ls实际上是在操作list。




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