怎么删不掉?

tujiazu 2008-07-01 12:22:58
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]
[]


这个程序里,集合全删了。而上面一个程序却没有。
很疑惑,请高手赐教。

...全文
155 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuijie_cn 2008-07-01
  • 打赏
  • 举报
回复
等待高手解答
w3329307 2008-07-01
  • 打赏
  • 举报
回复
关注下
dinglinhu 2008-07-01
  • 打赏
  • 举报
回复
学习了
craky 2008-07-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tujiazu 的回复:]
谢谢楼上高手啊。代码写的比我美观,呵呵。对比你的代码,我发先我在
while(iterator.hasNext())
{
// code
}

少写了 iterator=set.iterator(); 安照你修改的代码,集合中的元素删除了。
这个代码是不是想到与c语言中的指针重新指向的的作用呢?
也就是说我前面调用了hasNext(),next() 方法,“指针”已经指向最后呢?
我知道java都是引用,没有指针的概念。真的搞不清楚集合类内部的具体是怎么实现…
[/Quote]
Java是没有指针,iterator中只是与C中的指针有点类似,内部实现嘛,看看源码喽
guoxiaopeng1982 2008-07-01
  • 打赏
  • 举报
回复
可以结贴了…………所以说看万卷书,不如行万里路!
「已注销」 2008-07-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 guoxiaopeng1982 的回复:]
我以前也遇到过,就是你的遍历没有回头的原因!
[/Quote]

恩,我遇到的就是这个原因。感觉像指针。哎,书上没有介绍。
「已注销」 2008-07-01
  • 打赏
  • 举报
回复
谢谢楼上高手啊。代码写的比我美观,呵呵。对比你的代码,我发先我在
while(iterator.hasNext())
{
// code
}

少写了 iterator=set.iterator(); 安照你修改的代码,集合中的元素删除了。
这个代码是不是想到与c语言中的指针重新指向的的作用呢?
也就是说我前面调用了hasNext(),next() 方法,“指针”已经指向最后呢?
我知道java都是引用,没有指针的概念。真的搞不清楚集合类内部的具体是怎么实现的。HashSet 具体是怎么实现Iterator接口中的iterator()的方法的呢?
查了API,模模糊糊,还是不懂具体实现。
guoxiaopeng1982 2008-07-01
  • 打赏
  • 举报
回复
我以前也遇到过,就是你的遍历没有回头的原因!
craky 2008-07-01
  • 打赏
  • 举报
回复
修改后的

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);

}

// ----------------------------------------------
}
craky 2008-07-01
  • 打赏
  • 举报
回复
看我给你加的注释

//你这个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();
} // 删除集合中的元素

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧