黑马程序员技术交流社区
标题:
HashSet集合本身重复的添加不进去?为什么。。。。还要比较
[打印本页]
作者:
我能驾驭住
时间:
2012-6-4 10:55
标题:
HashSet集合本身重复的添加不进去?为什么。。。。还要比较
package Demo.collection;
import java.util.*;
import javax.swing.SingleSelectionModel;
public class HashSetDemo {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet hs = new HashSet();
hs.add(new Person("lisi", 14));
hs.add(new Person("zhangsan", 17));
hs.add(new Person("zhaoliu", 19));
hs.add(new Person("lisi", 14));
hs=SingleElement(hs);
Iterator it = hs.iterator();
while (it.hasNext()) {
Person p=(Person)it.next();
System.out.println(p.getName()+p.getAge());
}
}
private static HashSet SingleElement(HashSet hs) {
// TODO Auto-generated method stub
HashSet new1=new HashSet();
Iterator it = hs.iterator();
while (it.hasNext()) {
Person obj = (Person) it.next();
if (! new1.contains(obj)) {
new1.add(obj);
}
}
return new1;
}
}
class Person{
private String name;
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public int hashCode() {
return name.hashCode()+age;
}
public boolean equals(Object obj) {
if (!(obj instanceof Person)) {
return false;
}
Person p=(Person)obj;
return this.name.equals(p.name)&&this.age==p.age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
作者:
林豪
时间:
2012-6-4 11:19
如果他存的是对象的话,对象里面有很多元素,只用原本的hashcod和equals怎么能比较得出来?
作者:
胡团乐
时间:
2012-6-4 12:14
因为我们可能会在hashSet集合里面放很多对象 像常用的类似的 Person(String name,int age) 集合本身并不知道你要以什么方式判别对象是否相等;
如果name相同,但是age不同,这算不算同一个人呢?
或者name不同,age相同,这算不算同一个人呢?还要往里面添加吗?集合不知道
这就需要你复写equals方法给以明确;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2