Java HashMap分析及其它

本文探讨了哈希码(hashcode)的概念及其在不同对象类型中的应用,特别是字符串对象。文章强调了在重写equals方法时重写hashCode方法的重要性,并解释了其在HashMap和HashSet等数据结构中的作用。此外,还讨论了哈希表的时间复杂度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先来了解下Hashcdoe

1.对于字符串来说( ==表示对象是否相等,.equal表示内容是否相等)重写了hashcode()方法,因此只要内容相等hashcode也相等.

2.对于其它对象来说,不同对象可能有相同Hashcode,而对象相等的话则hashcode一定相等.


在有些情况下,程序设计者在设计一个类的时候为需要重写equals方法,比如String类,但是千万要注意,在重写equals方法的同时,必须重写hashCode方法。为什么这么说呢?

是那些情况呢,便是若用HashMap存储对象或者底层使用到HashMap的数据结构(如HashSet),因为HashMap中对象的唯一性有两个判断条件,一个是内容(.equal),一个是HashCode,


那如何重写HashCode方法呢,通常是类中的一个具有唯一性的字符串如

 public int hashCode() {
        // TODO Auto-generated method stub
        return name.hashCode()*37+age;
    

对象是一个人,这个人的name具有唯一性,而开头我们也说过相同内容的String具有相同的HashCode


哈希表的时间复杂度问题

存储的时间复杂度为O(1)

查询的时间复杂度为O(1)(相当于数组存储,Hash码相当于一个指针直接指向内存)

因为HashMap实际上是用一个数组实现




存储的时间复杂度为O(1)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值