set集合如何去除重复的对象

hanyu1222 2011-04-29 05:19:57
面试的时候碰到这样一个问题,不太明白

User u1 = new User();
u1.name="aa";
u1.password = "11";
User u2 = new User();
u2.name = "bb";
u2.password = "22";
Set sets = new HashSet();
sets.add(u1);
sets.add(u2);

是类似这样的去重复吗?
...全文
7483 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
android_开发 2013-09-17
  • 打赏
  • 举报
回复
首先比较hashcode,如果相等,继续比较equals,如果相等就是相等,否则不等
Qzcipccisv 2012-02-09
  • 打赏
  • 举报
回复
Set集合是依赖于Map接口实现的,因为Map不允许有元素重复,所以Set集合也就不允许元素重复...
实现机制就是这样的。具体可以看一下Map的机制就行了...
jienqiuqiu 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 hanyu1222 的回复:]
引用 10 楼 jienqiuqiu 的回复:

上面给出了部分代码,现在给出set的全部代码,中间有代码的验证部分。试验结果是
1
[Name :bb Password:22]

Java code

import java.util.*;
public class TestSet {
public static void main(String[] args) {
Use……
[/Quote]
已经给出hashCode 和equals的代码,你可以多在User中添加对象实例。然后比较
hanyu1222 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jienqiuqiu 的回复:]

上面给出了部分代码,现在给出set的全部代码,中间有代码的验证部分。试验结果是
1
[Name :bb Password:22]

Java code

import java.util.*;
public class TestSet {
public static void main(String[] args) {
User u1 = new User(……
[/Quote]
sets.remove(u1);//删除点一个User对象,然后进行验证 试验结果成功
你都remove了,那set中肯定就留一个对象啊
下面的重写equals和hashcode又有什么意义
jienqiuqiu 2011-04-29
  • 打赏
  • 举报
回复
上面给出了部分代码,现在给出set的全部代码,中间有代码的验证部分。试验结果是
1
[Name :bb Password:22]


import java.util.*;
public class TestSet {
public static void main(String[] args) {
User u1 = new User("aa","11");

User u2 = new User("bb","22");
Set sets = new HashSet();
sets.add(u1);
sets.add(u2);
sets.remove(u1);//删除点一个User对象,然后进行验证 试验结果成功
System.out.println(sets.size());
System.out.println(sets);
}
}
class User{
String name;
String password;
User(String name,String password){
this.name=name;
this.password=password;
}
public String toString(){
return "Name :"+name+" "+"Password:"+password;
}
public boolean equals(Object obj){
if(obj instanceof User){
User user=(User)obj;
return (name.equals(user.name))&&(password.equals(user.password));
}
return super.equals(obj);
}
public int hashCode(){
return name.hashCode();
}
}

androidmvc 2011-04-29
  • 打赏
  • 举报
回复
。。看源码啊。。。

set 中 add 的实现。。是根据 map中 put 方法 来的。。。

map 中的 key 不能重复。。比较的就是 hashcode 。。。

如果 hashcode 。。。就认为是。。同一个对象。。。就不在保存。。。
jienqiuqiu 2011-04-29
  • 打赏
  • 举报
回复
这里给出User类的方法,主要是hashCode 和equals方法

class User{
String name;
String password;
User(String name,String password){
this.name=name;
this.password=password;
}
public String toString(){
return "Name :"+name+" "+"Password:"+password;
}
public boolean equals(Object obj){
if(obj instanceof User){
User user=(User)obj;
return (name.equals(user.name))&&(password.equals(user.password));
}
return super.equals(obj);
}
public int hashCode(){
return name.hashCode();
}
}
kakashi8841 2011-04-29
  • 打赏
  • 举报
回复

public class User{

@Override
public String toString(){
return this.name;
}

@Override String hashCode(){
return User.class.toString()+toString();
}

@Override boolean equals(Object object){
if(object==null) return this==null;
return object.toString().equals(toString());
}
}
hanyu1222 2011-04-29
  • 打赏
  • 举报
回复
怎么做呢?谁有伪代码
huntor 2011-04-29
  • 打赏
  • 举报
回复
override了 equals hashCode方法的类使用Set去重复
hanyu1222 2011-04-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 goldenfish1919 的回复:]

需要重写User的equals和hashCode方法,Set才能够去除重复元素
[/Quote]
这个怎么实现,有相关代码吗
  • 打赏
  • 举报
回复
Sure, you could refer to source code of Set's add method.
若鱼1919 2011-04-29
  • 打赏
  • 举报
回复
需要重写User的equals和hashCode方法,Set才能够去除重复元素
liuhuabai100 2011-04-29
  • 打赏
  • 举报
回复
如果这样的话,需要将USer类的equals方法和HashCode方法重写吧?
等高手,O(∩_∩)O~

62,614

社区成员

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

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