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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 惠晖 中级黑马   /  2012-12-11 01:12  /  1282 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 惠晖 于 2012-12-11 13:04 编辑

   
         
import java.util.*;
class Lun
{
        public static void main(String[] args)
         {
                String s1="abc";
                String s2="abcd";
                String s3="abcdfd";
                String s4="abc";
                String s5="abwwcd";
                String s6="abcder";
                String s7="abc";
                ArrayList<String> al=new ArrayList<String>();
                al.add(s1);
                al.add(s2);
                al.add(s3);
                al.add(s4);
                al.add(s5);
                al.add(s6);
                al.add(s7);
                                System.out.println("原集合"+al);
                                al=getNewElements(al);
             System.out.println(al);
        }
         public static ArrayList<String> getNewElements(ArrayList<String> al)
        {
                 ArrayList<String> al1= new ArrayList<String>();
                                 Iterator<String> it=al.iterator();
                                 while (it.hasNext())
                                 {
                                        String s = it.next();  // 如果这里不写这句;  
                                        if (!(s.equals("abc")))  //这里改成if(!(it.next().equals("abc")))
                                        {
                                                al1.add(s);  // 这里 改成al1(it.next());为什么答案就是不一样的 求解释。。。。。。。。。。。我感觉2个代码都是同一个意思啊
                                        }
                                 }
                                 return al1;
        }
}
  

        

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

5 个回复

倒序浏览
it.next()是返回迭代器中的下一个元素,每执行一次取得的元素不是同一个
回复 使用道具 举报
额 你的意思 第二种写法  会漏掉一些值是么
回复 使用道具 举报
本帖最后由 张海涛 于 2012-12-11 01:38 编辑
  1. while (it.hasNext())
  2.     {
  3.           String s = it.next();  // 这句话的意思是将迭代的值赋值给s  
  4.           if (!(s.equals("abc")))  //这里是拿s的值进行比较,迭代器每次取值不同,如果改成it.next()就会再取得下一个值然后进行比较,并非你想要的那个值
  5.           {
  6.                   al1.add(s);  // 如果这里也写成it.next()的话就又会取下一个值,所以最后得出的结果不同
  7.            }
  8.     }
  9.     return al1;
复制代码

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
张海涛 发表于 2012-12-11 01:36

写的真好 赞一个完全明白了
回复 使用道具 举报
本帖最后由 吴愿涛 于 2012-12-11 14:24 编辑
  1. 针对楼主问题总结如下解决方案 ,看官们请过目 :
复制代码
  1. package com.itheima.chendonglian3;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.ListIterator;

  6. /**
  7. *
  8. * 一个ArrayList对象aList对象中存在若干个字符串元素,现欲遍历该ArrayList对象,删除其中所有值为"abc"的字符串元素
  9. *
  10. */
  11. public class ArrayListTest {
  12. public static void main(String[] args) {
  13. System.out.println("--------第一种------------");
  14. removeByFor();
  15. System.out.println("--------第二种------------");
  16. removeByIterator1();
  17. System.out.println("--------第三种-----------------------");
  18. removeByIterator2();
  19. System.out.println("--------第四种-----------------------");
  20. removeByListIterator();
  21. System.out.println("----第五种增强for循环仅限于查询-------");
  22. queryByForEach();
  23. }
  24. /*
  25. * 使用一般for直接对集合进行删除
  26. */
  27. public static void removeByFor() {
  28. List<String> aList = new ArrayList<String>();
  29. aList.add("abc");
  30. aList.add("abcd");
  31. aList.add("abcde");
  32. aList.add("abc");
  33. System.out.println("删除前:" + aList);
  34. for (int i = 0; i < aList.size(); i++) {
  35. if ("abc".equals(aList.get(i))) {
  36. aList.remove(i);
  37. }

  38. }
  39. System.out.println("删除后:" + aList);
  40. }
  41. /*
  42. * 使用迭代器的remove()方法一
  43. */
  44. public static void removeByIterator1() {
  45. List<String> aList = new ArrayList<String>();
  46. aList.add("abc");
  47. aList.add("abcd");
  48. aList.add("abcde");
  49. aList.add("abc");
  50. System.out.println("删除前:" + aList);
  51. for (Iterator<String> it = aList.iterator(); it.hasNext();) {
  52. String str = it.next();
  53. if (str.equals("abc")) {
  54. it.remove();
  55. }
  56. }
  57. System.out.println("删除后:" + aList);
  58. }
  59. /*
  60. * 使用迭代器的remove()方法二
  61. */
  62. public static void removeByIterator2() {
  63. List<String> aList = new ArrayList<String>();
  64. aList.add("abc");
  65. aList.add("abcd");
  66. aList.add("abcde");
  67. aList.add("abc");
  68. System.out.println("删除前:" + aList);
  69. Iterator<String> it = aList.iterator();
  70. while (it.hasNext()) {
  71. String str = it.next();
  72. if (str.endsWith("abc"))
  73. it.remove();
  74. }
  75. System.out.println("删除后:" + aList);
  76. }

  77. /*
  78. * 使用列表迭代器 。ListIterator接口
  79. */
  80. public static void removeByListIterator() {
  81. List<String> aList = new ArrayList<String>();
  82. aList.add("abc");
  83. aList.add("abcd");
  84. aList.add("abcde");
  85. aList.add("abc");
  86. System.out.println("删除前" + aList);
  87. ListIterator<String> li = aList.listIterator();
  88. while (li.hasNext()) {
  89. String str = li.next();
  90. if (str.equals("abc")) {
  91. li.remove();
  92. }
  93. }
  94. System.out.println("删除后" + aList);

  95. }
  96. /*
  97. * 增强for循环查询,但是不能对遍历的元素进行增、删、改操作 。
  98. */
  99. public static void queryByForEach() {
  100. List<String> aList = new ArrayList<String>();
  101. aList.add("abc");
  102. aList.add("abcd");
  103. aList.add("abcde");
  104. aList.add("abc");

  105. Object[] obj = aList.toArray();
  106. for (Object o : obj) {
  107. String str = (String) o;
  108. if ("abc".equals(str)) {
  109. System.out.println("遍历出符合条件的元素是:"+str);
  110. }
  111. }
  112. }

  113. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 很给力!

查看全部评分

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