hashCode equals hashSet
基于hash的map也是这种机制。
HashSet
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet; public class Sets { public static void main(String[] args) {
// TODO Auto-generated method stub
Person p1 = new Person("320321");
p1.setAge(22);
p1.setName("p1");
Person p2 = new Person("320321");
p2.setAge(23);
p2.setName("p2");
Person p3 = new Person("320322");
p3.setAge(22);
p3.setName("p3");
Person p4=new Person("320321");
p4.setAge(22);
p4.setName("p4");
HashSet<Person> hashSet = new HashSet();
/*
* Add elements
*/
// p1 equals p2, p1.hashCode != p2.hashCode
hashSet.add(p1);
hashSet.add(p2);
// p1, p2
System.out.println(hashSet);
// p3 not equals p1, p2, but p3.hashCode == p1.hashCode
hashSet.add(p3);
// p1, p3, p2
System.out.println(hashSet);
// p4 equals p1, p2, and p4.hashCode == p1.hashCode
hashSet.add(p4);
// p1, p3, p2, without p4
System.out.println(hashSet); /*
* Remove elements. Now, the SET contains p1, p3, p2
*/
hashSet.remove(p4);
// p1 will be removed, since p1 equals p4 and p1.hashCode == p4.hashCode
System.out.println(hashSet);
// Although the SET contains p2 who equals p4, but can't find "p4"
// Also, p3.hashCode == p4.hashCode but not find "p4" in the same bucket
System.out.println(hashSet.contains(p4));
}
}
Person
public class Person implements Comparable<Person> {
private String name, id, gender;
private int age;
private String[] property;
public Person() {
}
public Person(String id) {
this.id = id;
}
public String getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public void setGender(String gender) {
this.gender = gender;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public String getGender() {
return gender;
}
public int getAge() {
return age;
}
public String[] getProperty() {
return property;
}
public void setProperty(String[] property) {
this.property = property;
}
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (!(o instanceof Person)) {
return false;
}
Person p = (Person) o;
if (id == null ? p.getId() == null : id.equals(p.getId())) {
return true;
}
return false;
}
@Override
public int hashCode() {
return age;
}
@Override
public String toString() {
return this.id + " age: " + this.age + " name: " + this.name;
}
@Override
public Person clone() {
Person p = null;
try {
p = (Person) super.clone();
p.setProperty(property.clone());
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return p;
}
@Override
public int compareTo(Person p) {
return this.age - p.getAge();
}
}
hashCode equals hashSet的更多相关文章
- == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable
一:== 和 equals == 比较引用的地址equals 比较引用的内容 (Object 类本身除外) String obj1 = new String("xyz"); Str ...
- HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)
引言:我们都知道HashSet这个类有add remove contains方法,但是我们要深刻理解到底是怎么判断它是否重复加入了,什么时候才移除,什么时候才算是包括????????? add ...
- HashCode equals
HashCode: hashcode就是一个签名.当两个对象的hashcode一样时,两个对象就有可能一样.如果不一样的话两个对象就肯定不一样.一般用hashcode来进行比较两个东西是不是一样的,可 ...
- Java hashCode() equals()总结
1.hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的: 2.如果两个对象相同,就是适用于equals(j ...
- Java hashCode(), equals()
转自:http://blog.csdn.net/fenglibing/article/details/8905007冯立彬的博客 以下是关于HashCode的官方文档定义: hashcode方法返回该 ...
- String类型中ToString hashCode equals compareTo等方法的经典实现
private final char value[]; private int hash; // Default to 0 public String(String original) { this. ...
- 关于覆盖Object中的hashCode, equals和toString
最近在看<Effective Java>,里面看到了关于重载hashCode.equals和toString方法的篇章,顿时觉得视野开拓了不少,而且正结合自己工作.项目中的实例,觉得有必要 ...
- Java hashCode&&equals
/** 为保证向Set中添加的对象其所在的类必须要重写hashCode和equals方法: 重写的原则:hashCode和equals尽量保持一致性: 两个相同的对象equals()返回true时,那 ...
- Java基础学习笔记十六 集合框架(二)
List List接口的特点: 它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的. 它是一个带有索引的集合,通过索引就可以精 ...
随机推荐
- 使用JNA替代JNI调用本地方法
JNA全称是Java Native Access,是Sun推出的一种调用本地方法技术,比起它的同门师兄JNI,JNA大大简化了调用本地方法的过程,使用也比较方便, JNA是在JNI的基础上完善的,用青 ...
- PHP pclzip.php 解压中文乱码
修改 pclzip中方法privExtractFile 代码 if ($p_path != '') { $p_entry['filename'] = $p_path."/".$p_ ...
- reactor---元数据驱动的表单
class NameForm extends React.Component { constructor(props) { super(props); this.state = { ...
- jQuery序列化表单 serialize() serializeArray()(非常重要)
https://m.2cto.com/kf/201412/361303.html 2014-12-15 1.serialize()方法 描述:序列化表单内容为字符串,用于Ajax请求. 格式:var ...
- js正则 - 限制用户名只能中文、字母和数字 , 不能包含特殊字符
/^[\u4E00-\u9FA5A-Za-z0-9]+$/
- 使用JavaScript和Canvas打造真实的雨滴效果
使用JavaScript和Canvas打造真实的雨滴效果 寸志 · 1 年前 我最近搞了一个有趣的项目——rainyday.js .我认为这个项目并不怎么样,而且,事实上这是我第一次尝试接触一些比弹窗 ...
- CSS-font
font:[ [ <' font-style '> || <' font-variant '> || <' font-weight '> ]? <' font ...
- HTML5学习第四天
HTML5学习第四天 一.HTML列表 HTML列表,有无序表,有序表以及自定义表,列表于列表之间可以实现嵌套 列表相关操作 <ul> <li>(多选)谁世界第二可爱?< ...
- PE文件结构体-IMAGE_SECTION_HEADER
在PE文件头与原始数据之间存在一个区块表(Section Table),它是一个IMAGE_SECTION_HEADER结构数组, 区块表包含每个块在映像中的信息(如位置.长度.属性),分别指向不同的 ...
- 51nod 1163:最高的奖励 优先队列
1163 最高的奖励 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该 ...