基于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. Immediate Decodability[UVA644](Trie入门)

    传送门 题意:给出一些数字串,判断是否有一个数字串是另一个串的前缀. 这题真的可以算是Trie树的一道模板题了. 先把Trie树建好,建树的时候记录一个sum表示一个节点有多少个串会包含此节点,然后再 ...

  2. 【剑指Offer面试编程题】题目1504:把数组排成最小的数--九度OJ

    题目描述: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323. 输入: 输 ...

  3. 十六、myeclipse导入别人项目报错java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServle异常

    问题原因:java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServle异常    我是把别人的源码项目直接导 ...

  4. tcpdump 获取SQL

    tcpdump [-aAdDefhIJKlLnNOpqRStuUvxX] [ -B size ] [ -c count ] [ -C file_size ] [ -E algo:secret ] [ ...

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

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

  6. 【Android】在程序中使用触力反馈

    触力反馈又名:hapticFeedbackEnabled 一般有两种实现方式 第一种是在XML布局文件里面设置 android:hapticFeedbackEnabled="true&quo ...

  7. 车林通购车之家--购车计算器模块js实现

    //jsq-nav.twig <ul class="switch-nav db-tags bgfff clearfix"> <li id="qk&quo ...

  8. 关于Tomcat部署项目的点点滴滴

    在给客户部署环境时,我们不可能想开发一样,在编辑软件部署一下tomcat就可以正常运行.我们也应该清楚java的运行机制**“先编译,后解释”**的原则.(如下图)![图片描述][1]那么在Tomca ...

  9. Hive的原理和基本用法

    一.Hive的概述 1.Hive的定义 Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL进行数据读取.写入和管理. 2.Hive的架构图 hive ...

  10. 【转】深入分析JAVA IO(BIO、NIO、AIO)

    IO的基本常识 1.同步 用户进程触发IO操作并等待或者轮询的去查看IO操作是否完成 2.异步 用户触发IO操作以后,可以干别的事,IO操作完成以后再通知当前线程继续处理 3.阻塞 当一个线程调用 r ...