Map集合常见面试题

在java面试过程中,Map时常会被作为一个面试点来问,今天就在这里整理总结一下

  • 首先回顾一下集合体系Map集合常见面试题
    • 集合面试过程中,对于单列集合经常会被问到List和set的区别
      • list集合元素有序并且集合元素可以重复
      • set集合元素无序并且集合元素不允许重复
    • 集合面试过程中,对于单列集合经常会被问道Arraylist和Linkedlist的区别
      • Arraylist底层数据结构为数组,所以有索引,查询速度比较快但是增删速度比较慢
      • LinkedList底层数据是双向链表,所以没有索引,查询速度比较慢,但是增删比较快
  • HashMap
    • 数据结构
      • JDK1.7:数组+链表
      • JDK1.8之后:数组+链表+二叉树Map集合常见面试题
      • Hashmap数据结构(这里以1.7为例)是由数组(table)+链表(entry)组成,每个entry对应着一个table的索引页对应着一个唯一的hash地址值
    • 初始化Map集合常见面试题
    • 我们看到Hashmap在使用空参构造的时候会默认加载一个长度为16,加载因子为0.75的集合
  • HashMap的put方法(保证key的唯一性)Map集合常见面试题
  • Hashmap在put的数据的时候,在底层代码中会先通过判断put的值的key是否为null,如果为null,会固定存放到table[0]下面,如果不为null,会通过hash()方法计算出key对应的hash地址,通过hash地址去寻找数据应存放的table的指定索引下,找到之后会判断put的key在链表中是否存在(地址值和具体值都要判断)如果存在则为替换,如果不存在则为新增;
  • JDK1.8的Hashmap和1.7的区别

     Map集合常见面试题  

  • JDK1.8之后在集合put元素的时候新增了一个长度检测,如果同意hash地址下的链表长度大于了等于了7,那么就会将链表转化为红黑树(为了提高查询效率)
  • HashMap和Hashtable的区别
    •  Hashmap可以存储Key为null的值,线程不安全,但是效率高
    • Hashtable不可以存储Key为null的值,线程安全,但是效率低
  • Map集合常见面试题
  • 在源代码里面我们可以清楚的看到,Hashtable的put方法中有这synchronize修饰,明显是线程安全的,而在Hashmap中并没有任何相关关键字修饰,而且没有加锁,所以线程是不安全的;
  • ConcurrentHashMap
    • ConcurrentHashmap区别于hash的分段锁Map集合常见面试题
    • ​​​在ConcurrentHashMap中他并没有在方法中佳田synchronize关键字修饰,而是使用Segment同步方法,而且Segment又继承了ReentrantLock,所以实现了分布式锁,保证线程安全的同时还提交了效率;
    • Map集合常见面试题
版权声明:程序员胖胖胖虎阿 发表于 2022年10月6日 上午8:40。
转载请注明:Map集合常见面试题 | 胖虎的工具箱-编程导航

相关文章

暂无评论

暂无评论...