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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© yaohsieh 中级黑马   /  2013-12-26 21:43  /  1136 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Iterator;

  4. public class Test {
  5.         public static void main(String[] args) {

  6.                 Collection c = new ArrayList();
  7.                 String s1 = new String("超人");
  8.                 String s2 = new String("蜘蛛侠");
  9.                 String s3 = new String("蝙蝠侠");
  10.                 c.add(s1);
  11.                 c.add(s2);
  12.                 c.add(s3);
  13.                 Iterator it = c.iterator();
  14.                 while (it.hasNext()) {
  15.                         String s = (String) it.next();
  16.                         System.out.println(s);
  17.                         if (s.equals("蜘蛛侠"))
  18.                                 c.remove(s);
  19.                 }
  20.         }
  21. }
复制代码
为什么输出结果是下面,删除的是蜘蛛侠,蝙蝠侠却没了?
  1. 超人
  2. 蜘蛛侠
复制代码





评分

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

查看全部评分

5 个回复

倒序浏览
本帖最后由 75100313 于 2013-12-26 22:18 编辑

List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。在遍历一次就对了
  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Iterator;

  4. public class Test {
  5.         public static void main(String[] args) {

  6.                 Collection c = new ArrayList();
  7.                 String s1 = new String("超人");
  8.                 String s2 = new String("蜘蛛侠");
  9.                 String s3 = new String("蝙蝠侠");
  10.                 c.add(s1);
  11.                 c.add(s2);
  12.                 c.add(s3);
  13.                 Iterator it = c.iterator();
  14.                
  15.                 while (it.hasNext()) {
  16.                         String s = (String) it.next();
  17.                         System.out.println(s);
  18.                         if (s.equals("蜘蛛侠"))
  19.                                 c.remove(s);
  20.                 }
  21.                 System.out.println("删除之后在看c中的数据");
  22.                 Iterator it1 = c.iterator();
  23.                 while (it1.hasNext()) {
  24.                         String s = (String) it1.next();
  25.                         System.out.println(s);

  26.                 }
  27.         }
  28. }
复制代码

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
乔兵 + 1
yaohsieh + 3

查看全部评分

回复 使用道具 举报
Iterator it = c.iterator();
                while (it.hasNext()) {
                        String s = (String) it.next();
                        System.out.println(s);
                        if (s.equals("蜘蛛侠"))
                                c.remove(s);
System.out.println(s); 当这里输出蜘蛛侠 之后就把蜘蛛下从it 中删除了,本来it 中有3个元素
{S1,S2,S3} 把蜘蛛侠删了就成了{S1,S3}, 此时it中已经不再有第三个元素,

评分

参与人数 2技术分 +1 黑马币 +3 收起 理由
乔兵 + 1
yaohsieh + 3 很给力!

查看全部评分

回复 使用道具 举报
{:soso_e113:}你要是想删除蜘蛛侠 还想打印出来  蝙蝠侠和超人  我建议你这么写
  1. import java.util.ArrayList;
  2. import java.util.Collection;
  3. import java.util.Iterator;
  4. import java.util.List;

  5. public class Test {
  6.         public static void main(String[] args) {

  7.                 List c = new ArrayList();
  8.                 String s1 = new String("超人");
  9.                 String s2 = new String("蜘蛛侠");
  10.                 String s3 = new String("蝙蝠侠");
  11.                 c.add(s1);
  12.                 c.add(s2);
  13.                 c.add(s3);

  14.                 for (int i = c.size() - 1; i >= 0; i--) {
  15.                         if (c.get(i).equals("蜘蛛侠")) {
  16.                                 c.remove(i);
  17.                         } else {
  18.                                 System.out.println(c.get(i));
  19.                         }
  20.                 }
  21.         }
  22. }
复制代码

评分

参与人数 2黑马币 +4 收起 理由
乔兵 + 1 mark
yaohsieh + 3 很给力!

查看全部评分

回复 使用道具 举报
75100313 发表于 2013-12-26 22:12
List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取 ...

懂了,输出的是删除前的蜘蛛侠,但是蜘蛛侠操作发生了,size()减少1,就不显示蝙蝠侠了
回复 使用道具 举报
多一点 发表于 2013-12-26 22:23
Iterator it = c.iterator();
                while (it.hasNext()) {
                        String s ...

感谢分析,很到位!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马