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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何竹冬 中级黑马   /  2013-1-4 16:39  /  1551 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 何竹冬 于 2013-1-6 13:46 编辑

毕向东老师的一个课后练习题
将List列表中的部分元素替换成指定元素
老是编译错误,怎么解决
  1. package cn.he.javabase;
  2. import java.util.*;
  3. /*
  4. 将List集合中的部分元素替换成制定元素
  5. 我的思路是:
  6. 1.先获取到指定子列表,赋值给一个新列表
  7. 2.将子列表中的元素替换成指定元素
  8. 3.删除子列表。
  9. 4.在指定位置添加新列表
  10. */
  11. public class ReplaceSubList
  12. {
  13. public static void replace(ArrayList<String> list,int start,int end,String key)
  14. {
  15. List<String> alist = list.subList(start,end);//第一步
  16. Collections.fill(alist,key);//第二步
  17. list.removeRange(start,end);//第三步
  18. list.addAll(start,alist);//第四步
  19. }
  20. public static void main(String[] args)
  21. {
  22. ArrayList<String> list = new ArrayList<String>();
  23. list.add("java01");
  24. list.add("java02");
  25. list.add("java03");
  26. list.add("java04");
  27. list.add("java05");
  28. System.out.println(list);
  29. replace(list,1,3,"java");
  30. System.out.println(list);
  31. }
  32. }
复制代码
编译提示
---------- java编译程序 ----------
ReplaceSubList.java:9: removeRange(int,int) 可以在 java.util.ArrayList 中访问 protected
  list.removeRange(start,end);
      ^
1 错误
输出完成 (耗时: 0 秒) - 正常终止

评分

参与人数 1技术分 +1 收起 理由
高境 + 1 神马都是浮云

查看全部评分

6 个回复

倒序浏览
需要这么麻烦吗?用个for循环从start到end索引,使用set(int index,E element)不就行了。。
回复 使用道具 举报
API中 这个方法是 protected void 这里肯定不能用了。
应该 利用JAVA反射获取类对象,才能调用 。
百度吧,应该有这个示例。
回复 使用道具 举报

import java.util.*;

public class ReplaceSubList
{
        public static void main(String[] args)
        {
                ArrayList<String> list = new ArrayList<String>();
                list.add("java01");
                list.add("java02");
                list.add("java03");
                list.add("java04");
                list.add("java05");
                System.out.println(list);
                List<String> l2=res(list,1,3,"java");
                System.out.println(l2);
        }
        /**该方法用于更改集合中start到end的元素为key,返回已个新的集合,包含头不包含尾*/
        public static <T> T res( T list,int start,int end,String key){
                //创建迭代器
                Iterator<String> it=((ArrayList)list).iterator();
                //创建一个集合
                List<T> l1=new ArrayList<T>();
                //对参数集合进行遍历
                for(int x=0;it.hasNext();x++){
                        if(x>=start && x<end){//判断,如果在start和end之间,就在新集合中加入key对象
                                it.next();//取一次参数集合元素,使它直接判断下一个元素
                                l1.add((T) key);
                        }
                        else{//不再start和end范围之内,将参数集合中的元素添加到新的集合中
                                l1.add((T) it.next());
                        }
                }
                return (T) l1;//返回新的集合       
        }
}
这个同样能够实现你说的功能。。返回一个替换元素后的集合
回复 使用道具 举报
本帖最后由 arno942 于 2013-1-4 22:24 编辑
  1. //没有你想的那么麻烦 集合里有set替换方法 ,集合里有增删改查方面的方法
  2. import java.util.ArrayList;
  3. import java.util.List;

  4. public class ListDemo {

  5.         public static void main(String[] args) {
  6.                
  7.                 List<String> list = new ArrayList<String>();
  8.                 list.add("java01");
  9.                 list.add("java02");
  10.                 list.add("java03");
  11.                 list.add("java04");
  12.                 list.add("java05");
  13.               //调用set()方法,给指定位置替换指定的元素
  14.               String str = list.set(3, "java");
  15.                 System.out.println(list);
  16.         }
  17. }
复制代码
回复 使用道具 举报
焦健 发表于 2013-1-4 21:53
import java.util.*;

public class ReplaceSubList

呵呵,泛型用的不错,虽然没试,谢谢了。
回复 使用道具 举报
懂了{:soso_e121:}

评分

参与人数 1黑马币 +30 收起 理由
高境 + 30

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马