集合框架

Hashmap 的特性

  1. hashmap特性

    hashmap 可以实现快速存取 key 允许为null

    非同步 线程不安全

    底层时hash表

  2. hashmap 的底层实现原理

    底层时数组加链表 put get存取对象 当执行put 方法时 , 先对键值计算hashcode()得到它在bucket数组的位置。获取对象时,先得到bucket的位置 在调用equals 找到需要的值。

  1. put 方法的流程

    1. 计算机hashcode
    2. 判断hash表是否为空
    3. 发生碰撞放到散列表里去
    4. hashcode 值相同 三种情况
      1. equals 判断是否有相同
      2. 红黑树就调用红黑树的插入方法
      3. 链表就在尾部插入 如果插入链表个数为8 就转变为红黑树
    5. 如果满了就扩容。
  1. hashmap 什么时候需要扩容

    1. 通过判断数组容量是否大于0 判断数组是否初始化过
    2. 没有初始化
      1. 是否初始化默认大小
      2. 是否初始化容量
      3. 扩容两倍将元素重新运算复制到新的散列表中

5.谈一下hashMap中get是如何实现的?

对key的hashCode进行hashing,与运算计算下标获取bucket位置,如果在桶的首位上就可以找到就直接返回,否则在树中找或者链表中遍历找,如果有hash冲突,则利用equals方法去遍历链表查找节点。

  1. hashmap 和 hashtable 的区别

    1. 相同点

      1. 都是key-value 存储

        1. HashMap允许Key-value为null,hashTable不允许;
        2. hashMap没有考虑同步,是线程不安全的。hashTable是线程安全的,给api套上了一层synchronized修饰;
          1. hashmap 的初始容量是16 hashtable 的初始容量是 11 (2*n+1)
          2. hashmap 自定义的hash算法 hashtable 没有自定义hash算法
      2. treemap 一般按照key 排序

String StringBuffer StringBuilder

Stringbuffer 是线程安全的 StringBuilder线程不安全

Donate comment here