zoukankan      html  css  js  c++  java
  • 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;
        ……
    }
  • 相关阅读:
    NodeJS从零开始——NPM的使用
    初涉Node.js
    C# Double toString保留小数点方法
    SQL Server2008附加数据库之后显示为只读
    如何在64位的Windows中安裝PLSQLDEVELOPER 8
    SQL Server DATEADD() 函数
    flash builder Error #2032
    [SC] OpenSCManager FAILED 1722
    Windows Media Player安装了却不能播放网页上的视频
    SqlServer里DateTime转字符串
  • 原文地址:https://www.cnblogs.com/1996yrb/p/12858099.html
Copyright © 2011-2022 走看看