基于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. Linux系统chmod命令的含义和权限详解

    许多喜欢使用chmod命令的用户,对chmod命令的含义和权限仍然不是很清楚,因此在使用的时候对它们造成了一定的麻烦.为了解决这些用户的迷惑,今天小编就和大家一起分享下chmod命令的含义和权限. 对 ...

  2. C 语言入门第五章--循环结构和选择结构

    C语言中有三大结构,分别是顺序结构.选择结构和循环结构: 逻辑运算: 与运算: && 或运算:|| 非运算:! ==== #include<stdio.h> int mai ...

  3. Intent的常用属性action和category

    设置隐式跳转 首先在我们按钮监听器中添加 Intent i=new Intent(); //参数为字符串,可以添加包名.活动名 i.setAction("com.example.aaaaa. ...

  4. JAVA 数据库操作工具类----sqllite

    package com.asc.db; import android.content.ContentValues; import android.content.Context; import and ...

  5. Android 用ViewFlipper实现跑马灯效果的公告提示

    1.代码部分private void initViewFlipper(final HomepageListModel.Notice notice) { for (int i = 0; i < n ...

  6. 在linux环境中配置tomcat

    1.将tomcat文件上传到linux服务器上,并且解压文件. 2.创建文件夹 mkdir /usr/local/solr  (这个文件夹,根据自己的喜好来创建) 3.将解压好的tomcat文件复制到 ...

  7. Unity初识项目结构与面板

    一.Unity的项目结构 Unity中的一个项目是有若干个场景组成的,每一个场景又是由若干个游戏对象组成的,每一个游戏对象身上有若干个组件,每一个组件有若干个属性. 项目——>场景——>游 ...

  8. python获取最大、最小值

    1.获取数组极值,并返回索引 c = [-10,-5,0,5,3,10,15,-20,25]   print c.index(min(c)) # 返回最小值 print c.index(max(c)) ...

  9. WebEx如何录制电脑内的声音

    WebEx如何录制电脑内的声音     事情是这样的,我需要参加一个网络课程,视频讲课的,但是呢,又因为自己白天需要干别的事,就想着怎么把视频录下来晚上回去看,找了WebEx录屏软件,尝试了下,录屏听 ...

  10. fiddler抓取URL之过滤设置

    Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改. 只要是开启了fiddler,我们的 ...