[算法思想]:哈希(Hash)

Hashcode

引入Hash的背景

为什么的JDK中,我们为什么要引入Hash呢?我们可以来看一下。

Java的集合有两类,一类是List,还有一类是Set。前者有序可重复,后者无序不重复。当我们在Set 中插入的时候怎么判断是否已经存在该元素呢,可以通过equals方法。但是如果元素太多,用这样的方法就会非常多了。

于是有人发明了哈希算法来提高集合中查找元素的效率。 这种方式将集合分成若干个存储区域,每个对象可以计算出一个哈希码,可以将哈希码分组,每组分别对应某个存储区域,根据一个对象的 哈希码就可以确定该对象应该存储的那个区域。
 

Hash的主要目的

由上述来看,Hash算法是为了提高集合中查找元素的效率而发明的
 

HashCode方法

我们经常看到的HashCode方法可以这样理解
它返回的就是根据对象的内存地址换算出的一个值。这样一来,当 集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理 位置上。如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;如 果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存了,不相 同就散列其它的地址。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。
 

Hash的巧妙用法

我们可以以HashMap为例,我们可以用Hash来巧妙得统计一个String字符串中出现的字符的个数
代码如下

		String str = "abfdsgfgfdabs";
		HashMap<Character, Integer> map = new HashMap<>();
		// 统计每个字符出现的次数
		for (int i = 0; i < str.length(); i++) {
			map.put(str.charAt(i), map.getOrDefault(str.charAt(i), 0) + 1);
		}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值