hashCode、HashMap 的原理
hashCode 的契约是:如果两个对象相等,那么调用两个对象的 hashCode() 方法一定会返回相同的 hash 值。
HashMap 中 存储桶 的原理:
- 当你在 hashMap 中存储值的时候,这些值实际存储在一组桶中。每个桶都分配了一个用于识别它的号码。当你在 HashMap 中 put 一个值的时候,它就会在那些桶中存储数据。具体存储在哪个桶中,取决于你的对象所返回的 hashcode 。换句话说,如果一个对象调用 hashCode() 方法返回了49,那么它就会存储在 HashMap 编号为49的这个桶中。
- 随后,当你尝试通过调用 contains(element) 方法去检查集合中是否包含该元素。HashMap 首先会得到这个 element 的 hashCode, 然后,它将查看与 hashCode 对应的存储桶。如果存储桶为空,则表示我们已完成,并且返回 false ,这意味着 HashMap 不包含该元素。
- 如果存储桶中有一个或多个对象,则它将使用您定义的 equals() 函数将 element 与该存储桶中的所有其他元素进行比较。