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]
[]
这个程序里,集合全删了。而上面一个程序却没有。
很疑惑,请高手赐教。
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]
[]
这个程序里,集合全删了。而上面一个程序却没有。
很疑惑,请高手赐教。
楼主【tujiazu】截止到2008-07-01 12:23:01的历史汇总数据(不包括此帖):
发帖数:11 发帖分:200
结贴数:11 结贴分:200
未结数:0 未结分:0
结贴率:100.00% 结分率:100.00%
敬礼!
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();
} // 删除集合中的元素
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); } // ----------------------------------------------
}
while(iterator.hasNext())
{
// code
}
少写了 iterator=set.iterator(); 安照你修改的代码,集合中的元素删除了。
这个代码是不是想到与c语言中的指针重新指向的的作用呢?
也就是说我前面调用了hasNext(),next() 方法,“指针”已经指向最后呢?
我知道java都是引用,没有指针的概念。真的搞不清楚集合类内部的具体是怎么实现的。HashSet 具体是怎么实现Iterator接口中的iterator()的方法的呢?
查了API,模模糊糊,还是不懂具体实现。