java 怎么判断两个 Set 里的对象的值是否相同

听说可能需要重构 equals 方法 我刚刚学java 谁能帮帮我啊 ? 谢谢了 万分感谢 在线等.....

不需要重写equals()

你还可以这样做 首先判断两个set.size()是否相等,如不等就说明里面的对象肯定不相同
若等则把其中一个set的对象加入到另一个set中去,再判断加入后的set和原先的set.size()是否相同,如不同则说明两个set里对象不同

flyingFish211 方法不可以,因为set并不保证顺序。

重写equals()示例:
public boolean equals(Object obj){
return this.toString().equals(obj.toString());//这里以两个对象的toString()来作为判断的标准,你可以在这里直接return 一个boolean变量
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-01
用这个方法就可以了。
public boolean isSetEqual(Set set1, Set set2){

if(set1.size() != set2.size()){
return false;
}

Iterator ite1 = set1.iterator();
Iterator ite2 = set2.iterator();

while(ite1.hasNext()){
if(ite1.next() != ite2.next()){
return false;
}
}

return true;
}
回答楼下的,Set得实例一般都用TreeSet,而TreeSet是排序的。因此如果是同种类型比较,这个肯定是可以的。如果是不同类型比较,那么肯定为false, 有什么不可的呢?
不过我都同意,这样比较是不稳妥地,修改如下:

public boolean isSetEqual(Set set1, Set set2){

if(set1.size() != set2.size()){
return false;
}

Iterator ite1 = set1.iterator();
Iterator ite2 = set2.iterator();

boolean isFullEqual = true;
while(ite1.hasNext()){
if(!set2.contains(ite2.next())){
isFullEqual = false;
}
}

return isFullEqual;
}追问

不好意思哈 我刚刚学 java
这个方法 报异常啊
java.util.NoSuchElementException 谢谢了 帮我改下 !

追答

你那个是说你那个set里面没有元素呢。你的set为空的。加多了一个checking
public boolean isSetEqual(Set set1, Set set2){

if(set1 == null || set2 == null || set1.size() != set2.size() || set1.size() == 0 || set2.size() == 0){
return false;
}

Iterator ite1 = set1.iterator();
Iterator ite2 = set2.iterator();

boolean isFullEqual = true;
while(ite1.hasNext()){
if(!set2.contains(ite2.next())){
isFullEqual = false;
}
}

return isFullEqual;
}

追问

在吗 ?我用断点看了下 Set里只有三个对象 他还走第四次while()

追答

Sorry!while那里写错了,应该是ite1.next(),你用下面这个没问题的
public static boolean isSetEqual(Set set1, Set set2) {

if(set1 == null && set2 == null){
return true; //Both are null
}

if (set1 == null || set2 == null || set1.size() != set2.size()
|| set1.size() == 0 || set2.size() == 0) {
return false;
}

Iterator ite1 = set1.iterator();
Iterator ite2 = set2.iterator();

boolean isFullEqual = true;

while (ite2.hasNext()) {
if (!set1.contains(ite2.next())) {
isFullEqual = false;
}
}

return isFullEqual;
}

追问

做了个简单的改动 好用了 这个好使 谢谢了啊 !

本回答被提问者采纳
第2个回答  2011-03-01
举个简单的例子给你:
比如String这个类,你可以创建两个对象
String str1=new String(“123”);
String str2=“123”;
以上是两种不同的方法构建了str1和str2 如果你要比较它们的对象值(都是123)就要这样写
Sytem.out.println(str1.equals(str2)); 结果输出 true 则说明对象值相等
第3个回答  2011-03-01
把两个set里面的值挨个拿出来比较 完全一样就相同 否则不同追问

高手能帮我重写个 equals 方法吗 ? 谢谢了

相似回答