HashSet存储自定义对象如何保证唯一性
来源:互联网 发布:华为云计算ie待遇 编辑:程序博客网 时间:2024/04/26 04:08
使用HashSet并不能保证存入的对象不一样。虽然Set集合表示一种无序,不能重复的对象序列。在HashSet内部,通过哈希表来存储对象。判断两个对象是否相同的方法是HashCode方法与equals方法。如果HashCode相同,才判断调用equals判断。事实上,两个对象的HashCode是可以一样的,这个被叫做哈希冲突,哈希冲突不能被避免,只能减少。
public class Person {
private String name;
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
private int 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;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public class Tets02 {
/**
* @param args
*/
public static void main(String[] args) {
HashSet hashSet=new HashSet();
hashSet.add(new Person("zhangsan", 25));
hashSet.add(new Person("sunqi", 22));
hashSet.add(new Person("zhaoliu", 25));
hashSet.add(new Person("lisi", 29));
hashSet.add(new Person("wangwu", 20));
hashSet.add(new Person("zhoujiu", 57));
hashSet.add(new Person("zhangsan", 25));
Iterator it=hashSet.iterator();
while(it.hasNext()){
System.out.println(it.next().toString());
}
}
}
假设对象中名字相同,年龄相同就是一个人,那么hashset是无法区分的。调用系统的HashCode方法与equals无法区分。只有重写hashcode与
equals方法才能区分。
public class Person {
private String name;
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
private int 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;
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object obj) {
if(!(obj instanceof Person)){
return false;
}
Person person=(Person)obj;
if(this==obj)
return true;//用户可能直接添加了同一个对象。
return this.getName().equals(person.getName())&&this.getAge()==person.getAge();
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return this.getName().hashCode()+this.getAge();
}
}
- HashSet存储自定义对象如何保证唯一性
- HashSet存储自定义对象如何保证唯一性
- Java_基础—HashSet存储自定义对象保证元素唯一性
- set,hashset及HashSet存储自定义对象保证元素唯一性的解析,还有eclipse批量替换查询
- HashSet如何保证元素唯一性?
- HashSet如何保证元素的唯一性
- 集合框架-HashSet存储元素保证唯一性的图解
- HashSet存储元素保证唯一性的代码及图解
- HashSet保证元素唯一性
- 关于HashSet集合是如何保证元素唯一性的
- HashSet集合是如何保证元素的唯一性的?
- HashSet集合是如何保证元素的唯一性的?
- HashSet如何保证元素的唯一性-跟踪源码解析
- TreeSet存储自定义对象并保证排序和唯一
- 分析HashSet,HashMap源码,如何保证HashSet集合元素唯一性。
- HashSet存储自定义对象
- HashSet保证元素唯一性原理图解
- HashSet保证元素唯一性源码展示
- 使用C程序在linux下查看硬盘大小
- CSS的Hack大搜集
- Struts2的工作原理
- 黑马程序员——Java基础---GUI
- flash 无刷新上传文件 图片缩略图 前台
- HashSet存储自定义对象如何保证唯一性
- Scanner
- CFNetwork Concepts(译)
- 十八哥教会我们怎么下订单----.NET过程
- 计算字符串的后缀数组算法
- linux_2.6.30.4_Makefile_4--make zImage流程
- 授权的六大关键
- 汉字转拼音练习
- linux下的C语言开发(多线程编程)