Java中HashMap的底层实现原理

  之所以总结这篇博客,是因为在华为技术面的时候被问到了这个问题,当时大脑一片空白,开始鹅叫,然后说了个不太了解。。。

Java中的hashcode和equals

  1.关于hashcode

    1.hashcode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashcode是用来在散列存储结构中确定对象的存储地址的

    2.如果两个对象相同,就是适用于equals方法,那么这两个对象的hashcode一定要相同

    3.如果对象的equals方法被重写,那么对象的hashcode也尽量重写,并且产生hashcode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第二点

    4.两个对象的hashcode相同,并不一定表示两个对象就相同,也就是不一定适用于equals方法,只能够说明这两个对象在散列存储结构中,如hashtable,他们就是存放在同一个篮子里

  2.关于equals

    ==用于比较引用和比较基本数据类型时具有不同的功能:比较基本数据类型,如果两个值相同,则结果为true,而在比较引用时,如果引用指向内存中的同一对象,结果为true。

    equals()作为方法,实现对象的比较。由于==运算符不允许我们进行覆盖,也就是说它限制了我们的表达,因此我们复写equals,达到比较对象内容是否相同的目的,这些是==运算符做不到的。

HashMap的实现原理

  1.HashMap概述

    HashMap是基于哈希表的Map接口的非同步实现,此实现提供所有可选的映射操作。并允许使用null值和null键,此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

    在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外,HashMap实际上是一个链表散列的数据结构,     即数组和链表的结合体。

/**              HashMap java源码
 * The table, resized as necessary. Length MUST Always be a power of two.
 */
transient Entry[] table;

static class Entry<K,V> implements Map.Entry<K,V> {
    final K key;
    V value;
    Entry<K,V> next;
    final int hash;
    ……
}
原文地址:https://www.cnblogs.com/1996yrb/p/12858099.html