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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭荣强 高级黑马   /  2014-4-21 14:11  /  1092 人查看  /  5 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

将2和3位置的元素取子列表,替换成“0000”,然后再添加回去。我感觉结果应该是 [haha0, haha4, 0000, 0000, haha4,haha4]
但为什么打印结果是[haha0, haha4, 0000, 0000, 0000, 0000]

import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class Test {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                List<String> list = new LinkedList<String>();
                list.add("haha0");
                list.add("haha4");
                list.add("haha4");
                list.add("haha4");
        //调用方法,将2和3替换成"0000"               
                list = replaceParts(list, 2, 3, "0000");
                System.out.println(list);
        }

        public static List<String> replaceParts(List<String> list,int a,int b,String c){
         //获取2到3之间的子列表
                List<String> sublist=list.subList(a, b+1);       
        //填充
                Collections.fill(sublist, c);         
        //从索引2出添加子列表               
                list.addAll(a, sublist);         
                return list;       
        }
}

评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

5 个回复

倒序浏览
  1. import java.util.Collections;
  2. import java.util.LinkedList;
  3. import java.util.List;

  4. public class smallT {

  5.         public static void main(String[] args) {
  6.                 // TODO Auto-generated method stub
  7.                 List<String> list = new LinkedList<String>();
  8.                 list.add("haha0");
  9.                 list.add("haha1");
  10.                 list.add("haha2");
  11.                 list.add("haha4");
  12.                 //list.add("haha5");
  13.                 System.out.println("开始时候的List:"+list);
  14.         //调用方法,将2和3替换成"0000"               
  15.                 list = replaceParts(list, 2, 3, "0000");
  16.                 System.out.println("结束时候的List:"+list);
  17.         }

  18.         public static List<String> replaceParts(List<String> list,int a,int b,String c){
  19.          //获取2到3之间的子列表
  20.                 List<String> sublist1=list.subList(a, b+1);  
  21.                 System.out.println("截取a,b+1后的sublit1:"+sublist1);
  22.         //填充
  23.                 System.out.println("执行前的List:"+list);
  24.                 Collections.fill(sublist1, c);   
  25.                 System.out.println("执行后的List:"+list);
  26.                 System.out.println("填充sublit1:"+sublist1);
  27.         //从索引2出添加子列表               
  28.                 list.addAll(a, sublist1);
  29.                 System.out.println("list在a位置后添加sbulit1后的结果:+"+list);
  30.                 return list;        
  31.         }
  32. }
复制代码



开始时候的List:[haha0, haha1, haha2, haha4]
截取a,b+1后的sublit1:[haha2, haha4]
执行前的List:[haha0, haha1, haha2, haha4]
执行后的List:[haha0, haha1, 0000, 0000]
填充sublit1:[0000, 0000]
list在a位置后添加sbulit1后的结果:+[haha0, haha1, 0000, 0000, 0000, 0000]
结束时候的List:[haha0, haha1, 0000, 0000, 0000, 0000]

在你执行Collections.fill(sublist1, c);  这段代码后list就已经发生了变化,然后你继续添加2个0000的字符串进去,自然就编程后面全是0000啦!
回复 使用道具 举报
你为谁归来 发表于 2014-4-21 16:03
开始时候的List:[haha0, haha1, haha2, haha4]
截取a,b+1后的sublit1:[haha2, haha4]
执行前的List:[hah ...

Collections.fill(sublist1, c);     
我填充的是子列表sublsit,为神马list会变化,难道他们两个不是独立的吗??求解释
回复 使用道具 举报
subList这个方法是可以获得并且可以改变元素值的方法,就好像只是获得它的地址一样;所以你在填充的时候其实也该改变了list的元素;
回复 使用道具 举报
因为你的元素是对象
sublist的两个元素和list的2,3个元素其实指向的是同一个对象
所以……
回复 使用道具 举报
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class Test {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                List<String> list = new LinkedList<String>();
                list.add("haha0");
                list.add("haha4");
                list.add("haha4");
                list.add("haha4");
        //调用方法,将2和3替换成"0000"               
                list = replaceParts(list, 2, 3, "0000");
                System.out.println(list);
        }

        public static List<String> replaceParts(List<String> list,int a,int b,String c){
         //获取2到3之间的子列表
                List<String> sublist=list.subList(a, b+1);                 System.out.println(list); //[haha0, haha4, haha4, haha4]      
        //填充
                Collections.fill(sublist, c); //使用指定元素替换指定列表中的所有元素。                System.out.println(sublist);  //[0000, 0000]
                System.out.println(list);   //[haha0, haha4, 0000, 0000]        //从索引2出添加子列表               
                list.addAll(a, sublist);         
                return list;        
        }
}

我加入了输出语句,想看看结果。结果跟二楼的一样。我也分析部出来结果。不好意思。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马