zoukankan      html  css  js  c++  java
  • Map类面试题

    1. Map 的面试题分类

      1. HashMap的数据结构,面试官考察的是对 Map 内部的存储结构了解;
      1. HashMap 的增删查改操作,面试官考察的是对 map 内部操作流程的熟悉程度,既要知其然,还要知其所以然;
      1. HashMap 的应用,面试官考察的是灵活运用HashMap的能力。
      1. 其他Map类面试题,面试官考察的是系统掌握Map类的能力。

    2.经典面试题

      1. Java 集合你有了解么?平常项目比较常用的集合类有哪些?

    HashMap 和 ArrayList。

      1. 那你知道 HashMap 内部的数据结构吗?

    各个版本的实现略有不同。JDK1.7 及以前的 HashMap 采用数组 + 链表的结构来存储数据; JDK8 中的 HashMap 采用了数组 + 链表或树的结构来存储数据。

    • HashMap 的存储数据的过程是什么样的?

    ​不同的 JDK 版本版本的存储过程略有差异。在 JDK1.8 中,HashMap 存储数据的过程可以分为以下几步:

    1. 对 key 的 hashCode () 进行 hash 后计算数组获得下标 index;
    
    2. 如果当前数组为 null,进行容量的初始化,初始容量为 16;
    
    3. 如果 hash 计算后没有碰撞,直接放到对应数组下标里;
    
    4. 如果 hash 计算后发生碰撞且节点已存在,则替换掉原来的对象;
    
    5. 如果 hash 计算后发生碰撞且节点已经是树结构,则挂载到树上。
    
    6 / 如果 hash 计算后发生碰撞且节点是链表结构,则添加到链表尾,并判断链表是否需要转换成树结构
    (默认大于 8 的情况会转换成树结构);
    
    1. 完成 put 后,是否需要 resize () 操作(数据量超过 threshold,threshold 为初始容量和负载因子之积,默认为 12)。

    而在 1.7 的版本中,5/6 是合在一起的,即如果发生哈希碰撞且节点是链表结构,则放在链表头。

      1. 如果 hashCode 相同,如何获取对象呢?

    hashCode 相同,说明这些对象的数据都在同一个数组下标对应的链表或者树上。get 方法的签名是 V get (Object key) ,入参只有一个 key,因此通过遍历链表或者树,取出每一个节点对比 hash 值是否相等且 key 是否相等 (= 或者 equals)。

      1. HashMap 和 HashTable 有什么区别?

    ​ HashMap 是 JDK1.2 才出现的;HashTable 是 JDK1.0 就出现的。JDK 里面也说了 HashMap 可以大致相当于 HashTable(The HashMap class is roughly equivalent to Hashtable, except that it is
    unsynchronized and permits nulls)。

    至于具体的差异:

    1.HashMap 是线程不安全的,HashTable 是线程安全的。
    
    2.HashMap 的键需要重新计算对象的 hash 值,而 HashTable 直接使用对象的 hashCode。
    
    3.HashMap 的值和键都可以为 null,HashTable 的值和键都不能为 null。
    
    4.HashMap 的数组的默认初始化大小为 16,HashTable 为 11;HashMap 扩容时会扩大两倍,HashTable 扩大两倍 + 1;
  • 相关阅读:
    Spring Boot 详细简介
    Linux 安装 MySQL 8 数据库(图文详细教程)
    有了这个日期工具类,让日期转化不再烦恼
    Linux常用实用命令
    Java分割中英文,并且中文不能分割一半?
    Spring MVC或Spring Boot配置默认访问页面不生效?
    js如何判断当前页面是否处于激活状态
    博客园 & 陌上花开HIMMR | 脱单倒计时!只能帮你到这了
    博客园 & 陌上花开HIMMR | 距2020年脱单,只剩34天!
    博客园 & 陌上花开HIMMR | 脱单倒计时!刚过完10.24的你,还想一个人过11.11吗?
  • 原文地址:https://www.cnblogs.com/masters-/p/12897212.html
Copyright © 2011-2022 走看看