HashMap 面试的提问
2018-08-06 21:46
295 查看
HashMap:首先按照特性来说明一下,储存的是键值对,线程不安全,非 Synchronied,储存的比较快,能够接受 null。按照工作原理来叙述一下,Map 的 put(key,value)来储存元素,通过 get(key)来得到 value 值,通过 hash 算法来计算 hascode 值,根据 hashcode 值来决定 bucket(桶),储存结构就算哈希表。
提问:两个 hashcode 相同的时候会发生说明?
hashcode 相同,bucket 的位置会相同,也就是说会发生碰撞,哈希表中的结构其实有链表(LinkedList),这种冲突通过将元素储存到LinkedList 中,解决碰撞。储存顺序是仿在表头。
提问:如果两个键的 hashcode 相同,如何获取值对象?
如果两个键的 hashcode 相同,我们通过 key.equals()找到 LinkedList 中正确的节点。
提问:如果 HashMap 的大小超过了负载因子?怎么办?
默认的 HashMap 里面的负载因子大小是 0.75,将会重新创建一个原来 HashMap 大小的两倍 bucket 数组。
提问:重新调整的话会出现什么问题?
多线程情况下会出现竞争问题,因为你在调节的时候,LinkedList储存是按照顺序储存,调节的时候回将原来最先储存的元素(也就是最下面的)遍历,多线程就好试图重新调整,这个时候就会出现死循环。
提问:为什么要用 String、Wrapper 类,来作为键值对?
因为他们一般不是不可变的,源码上面 final,使用不可变类,而且重写了 equals 和hashcode 方法,避免了键值对改写。提高 HashMap 性能。
提问:使用 CocurrentHashMap 代替 Hashtable?
可以,但是 Hashtable 提供的线程更加安全。
水平有限,若有问题请留言交流!
互相学习,共同进步 :) 转载请注明出处谢谢!
提问:两个 hashcode 相同的时候会发生说明?
hashcode 相同,bucket 的位置会相同,也就是说会发生碰撞,哈希表中的结构其实有链表(LinkedList),这种冲突通过将元素储存到LinkedList 中,解决碰撞。储存顺序是仿在表头。
提问:如果两个键的 hashcode 相同,如何获取值对象?
如果两个键的 hashcode 相同,我们通过 key.equals()找到 LinkedList 中正确的节点。
提问:如果 HashMap 的大小超过了负载因子?怎么办?
默认的 HashMap 里面的负载因子大小是 0.75,将会重新创建一个原来 HashMap 大小的两倍 bucket 数组。
提问:重新调整的话会出现什么问题?
多线程情况下会出现竞争问题,因为你在调节的时候,LinkedList储存是按照顺序储存,调节的时候回将原来最先储存的元素(也就是最下面的)遍历,多线程就好试图重新调整,这个时候就会出现死循环。
提问:为什么要用 String、Wrapper 类,来作为键值对?
因为他们一般不是不可变的,源码上面 final,使用不可变类,而且重写了 equals 和hashcode 方法,避免了键值对改写。提高 HashMap 性能。
提问:使用 CocurrentHashMap 代替 Hashtable?
可以,但是 Hashtable 提供的线程更加安全。
水平有限,若有问题请留言交流!
互相学习,共同进步 :) 转载请注明出处谢谢!
相关文章推荐
- Java 面试高频提问知识点之:Set、List 和 Map 的区别
- [置顶] java面试基础-Java中HashMap的实现
- 面试中的HashMap、Hashtable与ConcurrentHashMap
- HashMap与Hashtable的区别是面试中经常遇到的一个问题。这个问题看似简单,但如果深究进去,也能了解到不少知识。本文对两者从来源、特性、算法等多个方面进行对比总结。力争多角度、全方位的展示二者的不同,做到此问题的终结版。
- 面试时如何向公司提问?
- 面试时最经常被问到的问题(Frenquently asked interview questions)之终结篇--提问面试官
- java面试之HashMap延伸出来的--什么是ConcurrentHashMap?
- 天下无难试之HashMap面试刁难大全
- HashMap中面试常问的工作原理
- HashMap--面试必问的集合类
- 面试常考题之:HashMap和Hashtable的区别
- 面试时,如何向公司提问?
- (java面试) 11. HashMap和ConcurrentHashMap的区别,HashMap的底层源码
- 面试提问环节
- Android开发面试经——6.常见面试官提问Android题②(更新中...)
- Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结
- 个人面试提问企业必问的问题
- 跳槽面试常遇到的经典提问
- hashmap底层实现原理以及常见的面试问题
- 助你快速踏入高薪职场——2017面试集锦之常见提问