基于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的更多相关文章

  1. == 和 equals,equals 与 hashcode,HashSet 和 HashMap,HashMap 和 Hashtable

    一:== 和 equals == 比较引用的地址equals 比较引用的内容 (Object 类本身除外) String obj1 = new String("xyz"); Str ...

  2. HashSet——add remove contains方法底层代码分析(hashCode equals 方法的重写)

    引言:我们都知道HashSet这个类有add   remove   contains方法,但是我们要深刻理解到底是怎么判断它是否重复加入了,什么时候才移除,什么时候才算是包括????????? add ...

  3. HashCode equals

    HashCode: hashcode就是一个签名.当两个对象的hashcode一样时,两个对象就有可能一样.如果不一样的话两个对象就肯定不一样.一般用hashcode来进行比较两个东西是不是一样的,可 ...

  4. Java hashCode() equals()总结

    1.hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的: 2.如果两个对象相同,就是适用于equals(j ...

  5. Java hashCode(), equals()

    转自:http://blog.csdn.net/fenglibing/article/details/8905007冯立彬的博客 以下是关于HashCode的官方文档定义: hashcode方法返回该 ...

  6. String类型中ToString hashCode equals compareTo等方法的经典实现

    private final char value[]; private int hash; // Default to 0 public String(String original) { this. ...

  7. 关于覆盖Object中的hashCode, equals和toString

    最近在看<Effective Java>,里面看到了关于重载hashCode.equals和toString方法的篇章,顿时觉得视野开拓了不少,而且正结合自己工作.项目中的实例,觉得有必要 ...

  8. Java hashCode&&equals

    /** 为保证向Set中添加的对象其所在的类必须要重写hashCode和equals方法: 重写的原则:hashCode和equals尽量保持一致性: 两个相同的对象equals()返回true时,那 ...

  9. Java基础学习笔记十六 集合框架(二)

    List List接口的特点: 它是一个元素存取有序的集合.例如,存元素的顺序是11.22.33.那么集合中,元素的存储就是按照11.22.33的顺序完成的. 它是一个带有索引的集合,通过索引就可以精 ...

随机推荐

  1. scrapy 中没有 crawl 命令

    确保两点: 1.把爬虫.py 复制到 spider 文件夹里 如 执行 scrapy crawl demo.py (spiders 中就要有 demo.py 文件) 2.在项目文件夹内执行命令 在 s ...

  2. 阿里云CentOS安装图形化界面

    阿里云提供的linux系统是不含图形化界面的,如果您需要安装图形化界面, 请您参考为Linux实例安装图形化桌面环境和在CentOS系统中自动安装并运行VNC Server安装部署一下. 为Linux ...

  3. 三 基于Java动态数组手写队列

    手写队列: package dataStucture2.stackandqueue; import com.lt.datastructure.MaxHeap.Queue; import dataStu ...

  4. 指定GPU运行python程序

    一.命令行运行python程序时 1.首先查看哪些GPU空闲,nvidia-smi显示当前GPU使用情况. nvidia-smi 2.然后指定空闲的GPU运行python程序. CUDA_VISIBL ...

  5. IAR 设置问题

    IAR 设置问题 1.worksplace 的设置问题:edit configuration 这样,每个工程都可以有一个workplace,方便切换. 2.文件夹包含问题 3.包含.dat文件问题 . ...

  6. Linux centosVMware shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

    一.shell脚本中的逻辑判断 格式1:if 条件 ; then 语句; fi 格式2:if 条件; then 语句; else 语句; fi 格式3:if …; then … ;elif …; th ...

  7. 「NOIP2016」愤怒的小鸟

    传送门 Luogu 解题思路 首先这个数据范围十分之小啊. 我们考虑预处理出所有可以带来贡献的抛物线 三点确定一条抛物线都会噻 然后把每条抛物线可以覆盖的点状压起来,然后状压DP随便转移就好了. 有一 ...

  8. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:内容居中

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. SciPy 特殊函数

    章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...

  10. Vue中 onmouseenter,onmouseleave,onmouseover,onmouseout的区别

    今天在学Vue视频的时候,提到了这四个触发事件,我就想做下笔记: 1.onmouseenter和onmouseleave是一组:当鼠标进入指定区域的时候触发,但是不支持冒泡,进入或者离开子组件都不触发 ...