Java之HashMap的底层原理

2020-03-24  本文已影响0人  麦穗一足

一、 面试知识点

  1. 随着18年以来现在互联网对java面试题也是越问越深,其中hashmap更是java必问问题,那么我们今天就来总结一下hashmap 的底层原理和面试常考知识点。
  2. HashMap 是一种存储高校但是不保证有序的容器,它的数据结构为"数组+链表/红黑树"的结构(当链表长度到8以后数据结构改为红黑树)


    image.png
// jdk8 源码
static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
private static void hashMapNotSafe() {
     // 线程不安全版本
       Map<String, String> hashMap = new HashMap<>();
       //并发版本的hashMap。
  // Map<String, String> hashMap = new ConcurrentHashMap<>() ;
       for (int i = 0; i < 30; i++) {
           new Thread(()-> {
               hashMap.put(Thread.currentThread().getName(), UUID.randomUUID().toString().substring(0, 8));
               System.out.println(hashMap);
           }, String.valueOf(i)).start();
       }
   }

二、 考点分析

HashMap 作为最基础的容器,常用来考1.7和1.8的区别,除了这个要想在面试中脱颖而出还要对HashMap的前因后果要多了解。

  1. 考点一:为什么初始容量为2的幂等次?为什么负载因子为0.75f?为什么做那么多扰动处理。
  1. 考点二:& 字符串和%字符串 虽然效果一样,但是操作效果更高。
  2. 考点三:为什么int String 更适合做key?

三、 面试时候由于HashMap 引导出来的其他问题?

上一篇 下一篇

猜你喜欢

热点阅读