黑马程序员技术交流社区

标题: 关于集合 [打印本页]

作者: 何竹冬    时间: 2013-1-4 16:39
标题: 关于集合
本帖最后由 何竹冬 于 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 秒) - 正常终止


作者: 王钊    时间: 2013-1-4 17:27
需要这么麻烦吗?用个for循环从start到end索引,使用set(int index,E element)不就行了。。
作者: 王少雷    时间: 2013-1-4 17:36
API中 这个方法是 protected void 这里肯定不能用了。
应该 利用JAVA反射获取类对象,才能调用 。
百度吧,应该有这个示例。
作者: 焦健    时间: 2013-1-4 21:53

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;//返回新的集合       
        }
}
这个同样能够实现你说的功能。。返回一个替换元素后的集合
作者: 夏振博    时间: 2013-1-4 22:20
本帖最后由 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-6 13:45
焦健 发表于 2013-1-4 21:53
import java.util.*;

public class ReplaceSubList

呵呵,泛型用的不错,虽然没试,谢谢了。
作者: Fateˉ似命守护    时间: 2013-1-7 15:55
懂了{:soso_e121:}




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