`

HashSet hashCode equals

    博客分类:
  • java
阅读更多
在使用HashSet 的时候往往需要重写他的equals和hashCode方法,简单记录一下调用过程做个备忘
1.当hashcode不相等时,两个对象则不相等,不调用equals
2.当hashcode相等时,则看两个对象是否equals,即调用equals方法比较

public class Person {

	private String name;
	private int age ;

	public Person(){}

	public Person(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	@Override
	public int hashCode() {
		int flag = (int)(Math.random()*100);
		System.out.println("hashCode : " + flag + "(" + this.name + " : " + this.age +")");
		return flag;
	}

	@Override
	public boolean equals(Object obj) {
		if(obj instanceof Person){
			Person p = (Person)obj;
			if(this.name.equals(p.name) && this.age == p.age) {
				System.out.println("equals : true");
				return true;
			}else{
				System.out.println("equals : false");
				return false;
			}
		}
		System.out.println("equals : false");
		return false;
	}
}

	@Test
	public void test(){
		Person p1 = new Person("tom",22);
		Person p2 = new Person("tom",22);
		Person p3 = new Person("jack",22);

		boolean result = p1.equals(p2);
		System.out.println(result);
		System.out.println("========================");
		HashSet<Person> set = new HashSet<Person>();
		set.add(p1);
		System.out.println("========================");
		set.add(p2);
		System.out.println("========================");
		set.add(p3);
		System.out.println("set size : " + set.size());
		System.out.println("========================");

		Iterator<Person> its = set.iterator();

		while(its.hasNext()){
			Person p = its.next();
			System.out.println(p.getName() + " : " + p.getAge());
		}

	}
/*
equals : true
true
========================
hashCode : 23(tom : 22)
========================
hashCode : 9(tom : 22)
========================
hashCode : 89(jack : 22)
set size : 3
========================
tom : 22
tom : 22
jack : 22

*/

分享到:
评论

相关推荐

    重写hashCode()和equals()方法详细介绍

    主要介绍了重写hashCode()和equals()方法详细介绍,涉及重写equals()方法,重写hashCode()方法,重写equals()而不重写hashCode()的风险等相关内容的介绍,具有一定借鉴价值,需要的朋友可以参考下

    equals 和 hashCode两者效果分析详解.docx

    原因是因为,在Java自带的容器HashMap和HashSet中, 都需同时要用到对象的hashCode()和equals()方法来进行判断,然后再插入删除元素,这点我们一会再谈。 那么我们还是单独来看hashCode(),为什么HashMap需要用到...

    HashCode作用_动力节点Java学院整理

    Java集合中有两类,一类是List,一类是Set他们之间的...比如我们向HashSet插入1000数据,难道我们真的要迭代1000次,调用1000次equals()方法吗?hashCode提供了解决方案。怎么实现?我们先看hashCode的源码(Object)。

    大厂真题之阿里云-Java实习生

    HashSet 是如何保证不重复的 向 HashSet 中 add ()元素时...重复( HashMap 比较key是否相等是先比较 hashcode 在比较 equals )。 HashMap 是线程安全的吗,为什么不是线程安全的(最好画图说明多线程 环境下不安全)?

    HashSet和HashMap的区别_动力节点Java学院整理

    HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有...

    HashSet,TreeSet和LinkedHashSet的区别1

    简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等注意,如果要把一个对

    java集合知识-map、set等

    记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。 一般情况下,如果自定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。 建立对象判断是否相同的依据。...

    set集合的基本特点,set集合底层去重原理,集合怎么进行排序

    set集合是无序的相较于list集合是没有下标的,hashset底层去重,与hashCode、equals方法相关,排序的元素不是String,而是对象Person

    Java期末复习-类集框架

    Java类集框架 最大单值操作父接口Collection及其子接口、子类: List接口、ArrayList类、Vector类、栈操作类Stack、链表操作类LinkList、队列操作接口Queue、Set接口、...Comparable接口、equals()方法、hashCode()方法

    architect-awesome-code

    数据结构java队列——queue详细解析Queue:先进先出(FIFO)的数据结构。与List、Set同一级别,都...HashSet不存入重复元素的规则是:hashCode()和equals()。元素的哈希值通过元素的hashCode()方法来获取,hashSet首先会

    java8集合源码分析-CollectionDemo:自己复习集合框架时候的例子

    java8 集合源码分析 ...保证唯一性:元素hashCode和equals方法。hashCode方法相同,判断equals方法 ---LinkedHashSet: 有序,是HashSet的子类 2.TreeSet: 底层是二叉树,可对元素进行排序,默认是自然顺序

    HashTable和HashMap的区别_动力节点Java学院整理

    HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有...

    java8源码-putaoo.github.io:putao.github.io

    hashCode与equals) (String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的?、什么是反射机制?反射机制的应用场景有哪些?......) (Arraylist 与 LinkedList 异同、ArrayList 与 Vector 区别...

    java8源码-java-start::seedling::seedling::seedling:学习Java语法过程中的一些案例

    hashCode与equals) (String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的?、什么是反射机制?反射机制的应用场景有哪些?......) (Arraylist 与 LinkedList 异同、ArrayList 与 Vector 区别...

    实验05 Java集合.doc

    注意:因为Person类是自定义类,需要重写hashCode()方法和equals()方法,并规定只有姓名和身份证号都相等,则对象相等。 其中计算哈希码的算法:(31 + ((name == null) ? 0 : name.hashCode()))*31 + id (注:...

    jdk 的集合框架的主体结构

    jdk 的集合框架的主体结构: Set 成员不能重复 HashSet 外部无序地遍历成员。 成员可为任意Object子类的对象,但如果覆盖了equals方法,同时注意修改hashCode方法。

    Java面试题.docx

    1、java中==和equals和hashCode的区别 2、int与integer的区别 3、String、StringBuffer、StringBuilder区别 4、什么是内部类?内部类的作用 5、进程和线程的区别 6、final,finally,finalize的区别 7、...

    Java容器.xmind

    底层哈希表,基于hashCode的equals的比较方式,线程不安全,存取速度快。 SortedSet 标记: interface TreeSet 标记: class 实现comparable接口,元素是以二叉树的形式存放的。线程不安全 CopyOnWriteArraySet 标记:...

    Hash知识点总结

    hash 值如何求,hashCode 是什么,用来做什么 2. 冲突 1. 什么是冲突 2. 怎么避免冲突 3. 冲突了怎么办 3. equals 方法用来做什么 4. hash 表用在 Java 中是什么形式的 1. HashMap 是什么 2. HashSet 是什么...

Global site tag (gtag.js) - Google Analytics