一个简单的问题。。关于hashSet中的remove 方法 想问一下,是不是调用一次remove 方法最多只删除1个元素呢??有没有可能删除2个以上的元素? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 有一个继承的 removeAll()方法... 不是我的意思是说,不用removeAll方法,假如只用remove方法,是不是最多只删除一个元素 嗯..只能删一个..不过你可以利用iterator 去遍历数组.. 遍历的时候 找到相同的就remove掉就好了. 可以实现一次删除多个..remove(Object o) 如果指定元素存在于此集合中,则将其移除。 算了,我举个例子吧import java.util.*;/** * @author super * */public class TestDeleteFromHashSet { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Set<SomeElement> set = new HashSet<SomeElement>(); SomeElement so1 = new SomeElement(1); SomeElement so2 = new SomeElement(2); set.add(so1); set.add(so2); //显示set中的所有元素 System.out.println("起始状态"); Iterator it = set.iterator(); while(it.hasNext()){ System.out.print(it.next()); } System.out.println(); //现在将so2改成和so1相等 System.out.println("将so2改成和so1相等"); so2.setInt(1); Iterator it2 = set.iterator(); while(it2.hasNext()){ System.out.print(it2.next()); } System.out.println(); //现在删除set中与so1相等的元素 System.out.println("现在删除set中与so1相等的元素"); set.remove(so1); Iterator it3 = set.iterator(); while(it3.hasNext()){ System.out.print(it3.next()); } System.out.println(); }}class SomeElement{ private int i; public SomeElement(int i){ this.i = i; } public int hashCode(){ return i; } public boolean equals(Object o){ return i== ( (SomeElement)o).i; } public String toString(){ return "[SomeElement,i= "+i+"]"; } public void setInt(int i){ this.i=i; }}输出结果是起始状态[SomeElement,i= 2][SomeElement,i= 1]将so2改成和so1相等[SomeElement,i= 1][SomeElement,i= 1]现在删除set中与so1相等的元素[SomeElement,i= 1]我想问,正如红色部分显示,为什么只删除了1个元素? so1是对象..你删除的是 so1这个对象..而不是 对象的值是1的所有对象..由于总共有两个 对象..所以你删除了一个 .. 还有第二个so2.. 剩下的就是.so2 其实我有何尝不想。。不过我一朋友在备考SCJP,我就在帮助他。。其实我自己也有很多不懂,一遇到题目就XX了,最后鄙视下我的另外一个“高手”朋友,告诉我的东西全是错的。。 发现考SCJP的好多人是一点基础都没有的,郁闷啊 还有考的很多的都是细节问题,比如一个题目for(Iterator i:new ArrayList().iteraor){}错,因为foreach语句只能用于数组和实现了iterable接口的对象 要学JAVA应如何开始 BOLB 请教一个打包.EXE的问题 jTabbedPane的用法 求it315.org 中的java 录像教程下载! 求好书 各位大神:请问如何实现,每调用一次一个方法,返回值加一? 菜鸟想飞,请各位大虾赐教! 怎样在程序中设置 JScrollPane 的大小? java真的是跨平台的语言吗 我是新学JAVA的 请问下JDK帮助文档中的符号代表什么? 大家一起来探讨一下一个多线程任务的设计吧,希望高手进来指教
如果指定元素存在于此集合中,则将其移除。
/**
* @author super
*
*/
public class TestDeleteFromHashSet { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub Set<SomeElement> set = new HashSet<SomeElement>();
SomeElement so1 = new SomeElement(1);
SomeElement so2 = new SomeElement(2);
set.add(so1);
set.add(so2);
//显示set中的所有元素
System.out.println("起始状态");
Iterator it = set.iterator();
while(it.hasNext()){
System.out.print(it.next());
}
System.out.println();
//现在将so2改成和so1相等
System.out.println("将so2改成和so1相等");
so2.setInt(1);
Iterator it2 = set.iterator();
while(it2.hasNext()){
System.out.print(it2.next());
}
System.out.println();
//现在删除set中与so1相等的元素
System.out.println("现在删除set中与so1相等的元素");
set.remove(so1);
Iterator it3 = set.iterator();
while(it3.hasNext()){
System.out.print(it3.next());
}
System.out.println();
}}class SomeElement{
private int i;
public SomeElement(int i){
this.i = i;
}
public int hashCode(){
return i;
}
public boolean equals(Object o){
return i== ( (SomeElement)o).i;
}
public String toString(){
return "[SomeElement,i= "+i+"]";
}
public void setInt(int i){
this.i=i;
}
}输出结果是
起始状态
[SomeElement,i= 2][SomeElement,i= 1]
将so2改成和so1相等
[SomeElement,i= 1][SomeElement,i= 1]
现在删除set中与so1相等的元素
[SomeElement,i= 1]
我想问,正如红色部分显示,为什么只删除了1个元素?
for(Iterator i:new ArrayList().iteraor){}
错,因为foreach语句只能用于数组和实现了iterable接口的对象