HashSet存储自定义对象如何保证唯一性
来源:互联网 发布:mac excel2010 编辑:程序博客网 时间:2024/04/27 10:19
使用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保证元素唯一性源码展示
- 一句代码,查看它请求了多少次数据库
- 字符串的模糊匹配算法(从简单到复杂)
- 理解闭包Closure
- 580 - Critical Mass
- 约瑟夫问题
- HashSet存储自定义对象如何保证唯一性
- 使用Coin3D VS2010 Qt 5.3.1构建三维图形开发环境
- BlueTooth: 蓝牙技术入门者指南
- spring的依赖注入如何降低了耦合
- caffe for windows 训练cifar10
- SecureCRT rz 上传文件失败问题
- 初用ubuntu配置python环境
- Hummer TimeSeries DB 优势功能(操作)介绍
- Linux操作系统下IPTables配置方法详解