Map集合的扩充

一,Map底层的实现原理

  1,底层使用的是数组和链表存储数据的

  2,数组是hash表,是通过Map的key的hashCode返回值来定位数据的

         且数组的每一个元素都会对应一个链表(单向链表)

  3,数组元素我们称之为bucket(桶),每一个桶对应一个单向链表,链表中存储的Entry对象(Entry对象封装一对key-value)

   4,因为把数据存储在散列桶对应的链表中(链表有多个数据),查询效率低,所以,我们应该避免这种情况,那么就应该重写key对象的hashCode方法(尽可能让不同的key对象的hash值不一样)

  5,DEFAULT_INITIAL_CAPACITY:默认数组容量即桶的数组==16

  6,HashMap()

    *无参构造器:在被调用时,数组的初始容量为16

    *加载因子被设置为0.75.也就是说,当存储数据时,如果桶的使用数量为12时,此时,12/16=0.75,就会进行扩容。加载因子如果太小(虽然性能提高了),但是浪费空间,如果太大,不浪费空间,但是性能降低了,0.75是性能与空间作用的一个平衡点

  7,**HashSet底层实际上是HashMap+操作

二,Map接口的其他实现类;

  1,TreeMap:使用二叉树进行存储key-value

  2,HashTable:比较古老,线程安全,效率低,不能使用null作为key和value

        对应的HashMap线程不安全,但是效率高

  3,LinkedHashMap:底层使用链表来维护key-value的次序

  4,Properties:也是以key-value作为键值对存储信息

猜你喜欢

转载自blog.csdn.net/qq_40881157/article/details/81145821