• Java基础-容器


    一、整体架构

    几个基础问题:

    1.List如何排序?

    2.List删除某个元素

    3.对比问题(关键是掌握每个的特性):

      List和Set的区别

      ArrayList和HashSet的区别

      HashMap和Hashtable区别

    二、ArrayList

    1.概述

    2.源码

    3.扩容机制

    4.快速失败机制

    5.CopyOnWrite原理及缺点

    三、HashSet

    四、HashMap

    1.hashmap的数据结构 

      - 数组+链表+红黑树(jdk8)

    //数组
    Node[] table
    
    //数组元素的结构
    static class Node<K,V> implements Map.Entry<K,V> {
            final int hash;    //用来定位数组索引位置
            final K key;
            V value;
            Node<K,V> next;   //链表的下一个node
    }

      - 数组table长度length大小强制是2的n次方(“强制”的意思是不管你传入的是否是2的n次方,都会处理成2的n次方),那为什么是2的n次方呢?

          原因是:定位元素在table位置,当length为2的n次方时,有一个规律 “h& (length-1)=h%length”,然而运算效率上&比%元素高,所以底层强制2的n次方。

          简单一句话就是:HashMap中的hash算法,当length为2的n次方时,&比%效率更高

    2.hash冲突解决

      - HashMap解决冲突用的是链地址法,也就是用数组+链表这种结构来解决hash冲突的

    3.机制扩容

      - 扩容的时机(可以参考这篇文章 https://blog.csdn.net/u014532901/article/details/78936283)

         当map中包含的Node的数量大于等于threshold = loadFactor * capacity的时候,且新建的Node刚好落在一个非空的桶上,此刻触发扩容机制,将其容量扩大为2倍

      - 扩容的rehash造成并发死锁问题

        

    3.红黑树

    4.最小树化容量

    5.hash冲突解决

    五、Hashtable

    六、ConcurrentHashMap

    1.jdk7

    2.jdk8

    七、其他面试题

  • 相关阅读:
    2020-03-23
    2020-03-22
    2020-03-21
    2020-03-20
    2020-03-19
    2020-03-18
    2020-03-17
    单元测试-java
    2020-03-16
    C语言拯救计划Day3-1之求一批整数中出现最多的个位数字
  • 原文地址:https://www.cnblogs.com/yejiang/p/13507548.html
Copyright © 2020-2023  润新知