package mywork;import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;public class TestCollection {
  public static void main(String [] args){
  Set set=new HashSet();
  set.add("1");
  set.add("2");
  set.add("3");
  set.add("1");
  set.add("4");
  System.out.println("set="+set); // 无序,无重复
  
 Iterator iterator=set.iterator();//HashSet中的方法。 返回Iterator接口类型的
 while(iterator.hasNext())
 System.out.print(iterator.next()); //得到迭代器中所有的元素。
 //set.iterator();
 System.out.println(set.iterator().next());//只得到迭代器第一个元素。
 
 System.out.println(set.remove("1")); //返回boolean型,成功删除
 System.out.println(set.remove("200")?true:false);
 System.out.println(set.remove("2")?"成功删除":"失败,请重试");
 System.out.println("set="+set+"\n下面进行删除操作");//列举删除后全部的元素
 
 while(iterator.hasNext())
 { //利用迭代器
 System.out.println(iterator.next());
 iterator.next();
 iterator.remove();                    //怎么删不掉呢?
     System.out.println("set"+set);
 }

 System.out.println("set="+set);//??

  //---------------------------------------------------------------
  List list=new ArrayList();
  list.add("1");
  list.add("2");
  list.add("3");
  list.add("4");
  list.add("1");
  System.out.println("list="+list); //有序,可重复
  
  Iterator iterator1=list.iterator();
  while(iterator1.hasNext())
  System.out.print(iterator1.next());// 得到集合中的元素。
   System.out.println("___________");   
  while(iterator1.hasNext()) {
  iterator1.next();
 iterator1.remove(); 
     } //删除集合中的元素   
  System.out.println("list="+list); 
  
  }
  
  
  //----------------------------------------------
}//运行结果:
set=[3, 2, 1, 4]
32143
true
false
成功删除
set=[3, 4]
下面进行删除操作
set=[3, 4]
list=[1, 2, 3, 4, 1]
12341___________
list=[1, 2, 3, 4, 1]我调用了方法remove(),怎么最后System.out.println(set) 和System.out.println(list) 还显示呢?
再看下面一个程序:package mywork;
import java.util.Set;
import java.util.HashSet;
import java.util.Iterator;public class SetRemove {
public static void main(String [] args){


  Set set=new HashSet();
  set.add("5");
  set.add("4");
  set.add("45");
  set.add("34");
  set.add("23");
  
  System.out.println(set);
  Iterator iterator=set.iterator();
  while(iterator.hasNext()){
  iterator.next();
  iterator.remove();
  }
  System.out.println(set);
 }
}执行结果:
[45, 5, 4, 23, 34]
[]
这个程序里,集合全删了。而上面一个程序却没有。
很疑惑,请高手赐教。

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【tujiazu】截止到2008-07-01 12:23:01的历史汇总数据(不包括此帖):
    发帖数:11                 发帖分:200                
    结贴数:11                 结贴分:200                
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    看我给你加的注释        //你这个while已经把iterator遍历完了,下面删除的那个遍历根本进不去
            while(iterator.hasNext())
                System.out.print(iterator.next()); // 得到迭代器中所有的元素。
            
            
            //建议你这里再加如下一行
            iterator = set.iterator();
            //如果不加上面那行,根本就进不到这个里面来
            while(iterator.hasNext())
            { // 利用迭代器
                // 你这里next了两次就跳过了一个元素,我把其中一行给你注释掉了
                System.out.println(iterator.next());
                // iterator.next();
                iterator.remove(); // 怎么删不掉呢?
                System.out.println("set" + set);
            }
            //这里是同样的道理
            iterator1 = list.iterator();
            while(iterator1.hasNext())
            {
                iterator1.next();
                iterator1.remove();
            } // 删除集合中的元素
      

  3.   

    修改后的import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;public class TestCollection
    {
        public static void main(String[] args)
        {
            Set set = new HashSet();
            set.add("1");
            set.add("2");
            set.add("3");
            set.add("1");
            set.add("4");
            System.out.println("set=" + set); // 无序,无重复        Iterator iterator = set.iterator();// HashSet中的方法。 返回Iterator接口类型的
            while(iterator.hasNext())
                System.out.print(iterator.next()); // 得到迭代器中所有的元素。
            // set.iterator();
            System.out.println(set.iterator().next());// 只得到迭代器第一个元素。        System.out.println(set.remove("1")); // 返回boolean型,成功删除
            System.out.println(set.remove("200")? true: false);
            System.out.println(set.remove("2")? "成功删除": "失败,请重试");
            System.out.println("set=" + set + "\n下面进行删除操作");// 列举删除后全部的元素        iterator = set.iterator();
            while(iterator.hasNext())
            { // 利用迭代器
                // 你这里next了两次就跳过了一个元素,我把其中一行给你注释掉了
                System.out.println(iterator.next());
                // iterator.next();
                iterator.remove(); // 怎么删不掉呢?
                System.out.println("set" + set);
            }
            System.out.println("set=" + set);// ??        // ---------------------------------------------------------------
            List list = new ArrayList();
            list.add("1");
            list.add("2");
            list.add("3");
            list.add("4");
            list.add("1");
            System.out.println("list=" + list); // 有序,可重复        Iterator iterator1 = list.iterator();
            while(iterator1.hasNext())
                System.out.print(iterator1.next());// 得到集合中的元素。
            System.out.println("___________");        iterator1 = list.iterator();
            while(iterator1.hasNext())
            {
                iterator1.next();
                iterator1.remove();
            } // 删除集合中的元素
            System.out.println("list=" + list);    }    // ----------------------------------------------
    }
      

  4.   

      谢谢楼上高手啊。代码写的比我美观,呵呵。对比你的代码,我发先我在
      while(iterator.hasNext())
      {
       // code
      }
      
    少写了 iterator=set.iterator(); 安照你修改的代码,集合中的元素删除了。
    这个代码是不是想到与c语言中的指针重新指向的的作用呢?
    也就是说我前面调用了hasNext(),next() 方法,“指针”已经指向最后呢?
    我知道java都是引用,没有指针的概念。真的搞不清楚集合类内部的具体是怎么实现的。HashSet 具体是怎么实现Iterator接口中的iterator()的方法的呢?
    查了API,模模糊糊,还是不懂具体实现。
      

  5.   

    Java是没有指针,iterator中只是与C中的指针有点类似,内部实现嘛,看看源码喽