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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 玥夜 于 2014-8-20 13:25 编辑

求解释 关于List方法removeAll后为什么不可以使用Collections中的fill方法
  1. package com.itheima;

  2. import java.util.*;

  3. public class FillDemo {

  4.         public static void main(String[] args)
  5.         {
  6.                 ArrayList<String> al= new ArrayList<String>();
  7.                 al.add("aaa");
  8.                 al.add("bbb");
  9.                 al.add("ccc");
  10.                 al.add("ddd");
  11.                 System.out.println(al);
  12.                 fill(al,2,4,"我擦");
  13.                 System.out.println(al);
  14.                
  15.         }
  16.         public static void fill(List list, int from, int to, String str)
  17.         {
  18.                 List sub= list.subList(from, to);
  19.                 list.removeAll(sub);// 这一行代码好像不能与下一行共存。。。不知道为啥 求大神解释  谢谢
  20.                 Collections.fill(sub, str);
  21.                 list.addAll(from, sub);
  22.         }

  23. }
复制代码

谢谢  
大家视频中关于使用Collections中fill方法替换一段元素的代码是怎么写的呢

评分

参与人数 1黑马币 +5 收起 理由
masai158 + 5 就帮你这么多

查看全部评分

12 个回复

倒序浏览
w l g q     你removeAll  将ArrayList 集合中的所有元素都移光了,你还替换个甚

点评

removeAll是在list中移除和sub相同的元素吧  发表于 2014-8-18 21:18
回复 使用道具 举报
ssy1939 发表于 2014-8-18 20:56
w l g q     你removeAll  将ArrayList 集合中的所有元素都移光了,你还替换个甚

是的,都移出去了,怎么替换呢

点评

你是说sub中的元素没了 为什么啊 list.removeAll(list A)方法不会改变A中的元素吧  发表于 2014-8-18 22:03
回复 使用道具 举报
本帖最后由 masai158 于 2014-8-18 22:16 编辑
  1. import java.lang.reflect.Method;
  2. import java.util.ArrayList;
  3. import java.util.Collections;
  4. import java.util.Iterator;
  5. import java.util.List;
  6. import java.util.concurrent.Executors;

  7. /**通过 Collections 替换 指定位置的集合 元素。
  8. *
  9. * */
  10. public class Test022
  11. {

  12.     public static void main(String[] args)
  13.     {
  14.             List<String> al= new ArrayList<String>();
  15.             al.add("aaa");
  16.             al.add("bbb");
  17.             al.add("ccc");
  18.             al.add("ddd");
  19.             System.out.println(al);        //aaa,bbb,ccc,ddd

  20.             fill(al,0,3,"kkkk");

  21.             
  22.             System.out.println(al);       
  23.             
  24.     }
  25.    
  26.    
  27.     public static void fill(List<String> list, int from, int to,String str)
  28.     {
  29.             List startList = list.subList(0, from);
  30.             List endList = list.subList(from, to);
  31.            
  32.             Collections.fill(endList, str);
  33.            
  34.             List newList = new ArrayList();
  35.             newList.addAll(startList);
  36.             newList.addAll(from, endList);
  37.            
  38.             /**其实传过来的 list 是地址值。
  39.              * 我在下面操作都是对 那一个 集合操作的。
  40.              * 所以:你先对集合先进行删除。然后在添加的话。就会报并发异常。
  41.              * */
  42.     }
  43. }
复制代码
修改了一下

点评

问题就是 用Collections中的 fell方法修改list集合中的一部分元素  发表于 2014-8-18 21:59
回复 使用道具 举报
{:2_37:} 如果觉得好。给点黑马币 0,0 打赏我呗

评分

参与人数 1黑马币 +2 收起 理由
玥夜 + 2 这个帖子的2个币都给你了 好吧 你要那么多.

查看全部评分

回复 使用道具 举报
masai158 发表于 2014-8-18 22:02
如果觉得好。给点黑马币 0,0 打赏我呗

你那个有局限性  要是to后面还有元素 你这个方法就给弄没了
  1. public static void fill(List list, int from, int to, String str)
  2.         {
  3.                 List sub= list.subList(from, to);
  4.                 List temp= new ArrayList();
  5.                 temp.addAll(sub);
  6.                
  7.                 list.removeAll(sub);
  8.                 Collections.fill(temp, str);
  9.                 list.addAll(from, temp);
  10.         }
复制代码

点评

嗯。这个不错  发表于 2014-8-18 22:38
回复 使用道具 举报
玥夜 中级黑马 2014-8-18 22:49:11
7#
masai158 发表于 2014-8-18 22:02
如果觉得好。给点黑马币 0,0 打赏我呗

但是还是不知道为什么。。。
回复 使用道具 举报
玥夜 发表于 2014-8-18 22:49
但是还是不知道为什么。。。

对了。你是怎么测试出。我的那个数据会丢失的哎。
我搞了一半天,都没有测试出来。
回复 使用道具 举报
玥夜 中级黑马 2014-8-18 23:14:45
9#
masai158 发表于 2014-8-18 22:51
对了。你是怎么测试出。我的那个数据会丢失的哎。
我搞了一半天,都没有测试出来。
...

那错误不是并发修改异常是吧  就是不让同时操作,所以我就弄两个集合  一个移除  一个替换了:lol
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马