HashCode理解--3

news/2024/7/4 0:53:37 标签: string, 数据结构, null, equals, object, class
class="baidu_pl">
class="article_content clearfix">
class="htmledit_views">

                           HashCode理解--3

Java 对象 Hashcode 的作用是什么?可以联想class="tags" href="/tags/ShuJuJieGou.html" title=数据结构>数据结构的哈希表(散列表)、哈希函数。Object.hashCode() 就是一个哈希函数,用来计算散列值以实现哈希表这种class="tags" href="/tags/ShuJuJieGou.html" title=数据结构>数据结构。

看下哈希表结构:

默认是使用对象的地址计算散列码。

class="language-java">package interview;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;

public class Person {
	private int age;
	private String name;

	public Person(int age, String name) {
		super();
		this.age = age;
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public boolean class="tags" href="/tags/EQUALS.html" title=equals>equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj == class="tags" href="/tags/NULL.html" title=null>null) {
			return false;
		}
		if (getClass() != obj.getClass()) {
			return false;
		}
		final Person other = (Person) obj;
		if (age != other.age) {
			return false;
		}
		if (name == class="tags" href="/tags/NULL.html" title=null>null) {
			if (other.name != class="tags" href="/tags/NULL.html" title=null>null)
				return false;
		} else if (!name.class="tags" href="/tags/EQUALS.html" title=equals>equals(other.name))
			return false;
		return true;
	}
	
	/*public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime*result + age;
		result = prime * result + (name == class="tags" href="/tags/NULL.html" title=null>null ? 0 :name.hashCode());
		return result;
	}*/
	
	public static void main(String[] args) {
		Collection<Person> list = new ArrayList<Person>();
		Collection<Person> set = new HashSet<Person>();
		list.add(new Person(1, "a"));
		list.add(new Person(1, "a"));
		list.add(new Person(2, "a"));
		list.add(new Person(3, "a"));
		set.add(new Person(1, "a"));
		set.add(new Person(1, "a"));
		set.add(new Person(2, "a"));
		set.add(new Person(3, "a"));
		System.out.println("ArrayList size ==" + list.size());
		System.out.println("HashSet size ==" + set.size());	
	}
}

打印出了如下的结果  

ArrayList size == 4
HashSet size == 4

证明p1和p2两个对象还是不相等的

 

当我们把hashCode注释打开再运行一次

ArrayList size == 4
HashSet size == 3

证明了p1和p2两个对象已经相等

说明:HashCode主要是为了解决集合中元素的冲突问题,默认情况下,使用对象的地址来计算散列码,新建两个new Person(1,“a”)对象,他们在内存中对应不同的地址,因此,认为他们是不相同的,所以会存放在不同的位置,如果新定义了hashcode(),那么他就会认为是相同的两个对象,只是出现hash码冲突,通过函数体中内容来解决冲突。


http://www.niftyadmin.cn/n/1797321.html

相关文章

如何使用Erdas内的NDVI提取植被指数

NDVI&#xff08;归一化植被指数&#xff09;与植物的蒸腾作用、太阳光的截取、光合作用以及地表净初级生产力等密切相关。可用于检测植被生长状态、植被覆盖度和消除部分辐射误差等。计算植被指数可以使用ENVI、ArcGIS和Erdas等专业软件&#xff0c;这里介绍一下使用Erdas提取…

bootstrap使用之多个弹窗和拖动效果[开发篇]

有时开发一些特效&#xff0c;自己感觉挺爽的&#xff0c;像操作自己电脑一样操作你的网页&#xff0c;这里就介绍一个使用bootstrap的一点多窗口和拖动效果吧&#xff01; 这里&#xff0c;我们不使用静态打开的的方式&#xff0c;low...,1、添加一个a链接 触发&#xff0c;打…

如何使用Erdas进行聚类分析

聚类分析符合“物以类聚&#xff0c;人以群分”的原则&#xff0c;它把相似性大的样本聚集为一个类型&#xff0c;在特征空间里占据着一个局部区域。每个局部区域都形成一个聚合中心&#xff0c;聚合中心代表相应类型。这里以水经注万能地图下载器下载的谷歌的卫星地图为例&…

asp.net中的异步页面

要想了解asp.net 2.0的异步页的处理过程,先列出页面的生命周期&#xff1a; 1 &#xff1a;Init 事件&#xff1a; 页面初始化 &#xff0c;初始化设置。 2&#xff1a; LoadViewState方法&#xff1a; 加载视图状态&#xff0c; 填充ViewState属性。 3 &#xff1a;LoadPost…

安徽省谷歌卫星地图下载

一、概述 安徽&#xff0c;简称“皖”&#xff0c;省会合肥&#xff0c;位于中国大陆东部&#xff0c;属于华东地区&#xff0c;介于东经11454′-11937′&#xff0c;北纬2941′-3438′之间&#xff0c;公元1667年因江南省东西分置而建省。安徽得名于“安庆府”与“徽州府”之首…

到底什么是快乐?

到底什么是快乐? As someone who writes about happiness, Im often challenged to answer these three questions: 作为一个写有关“快乐”的文章的人&#xff0c;我通常被问到下面的3个问题&#xff1a; 1. How do I define "happiness," anyway? 我到底是如何定…

重庆市谷歌卫星地图下载

一、概述 重庆地处中国内陆西南部&#xff0c;东邻湖北、湖南&#xff0c;南靠贵州&#xff0c;西接四川&#xff0c;北连陕西。总面积8.24万平方千米&#xff0c;辖38个区县&#xff08;自治县&#xff09;&#xff0c;有“中国火锅之都”、“中国会展名城”、“世界温泉之都”…

Java中会存在内存泄露吗,请简单描述。

会。java导致内存泄露的原因很明确&#xff1a;长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露&#xff0c;尽管短生命周期对象已经不再需要&#xff0c;但是因为长生命周期对象持有它的引用而导致不能被回收&#xff0c;这就是java中内存泄露的发生场景。 1.集…