转载

ArrayList及HashMap

底层数组,但是会动态增长、只存数据,不存地址,逻辑顺序和物理顺序一致。

优点:按照索引查询效率高

缺点:删除效率低

底层

  • jdk1.7初始化容量为10,1.8初始化为0,在第一次添加元素的时候进行扩容
  • 当容量满时会进行扩容,默认每次扩容为1.5倍

LinkedList

双向链表,不连续的空间,不仅存数据,还存地址,逻辑顺序和物理顺序不一致。

优缺点与ArrayList相反

ArrayList与LinkedList谁更浪费空间?

都浪费,ArrayList创建固定空间,但不一定使用到那么多空间;LinkedList虽然使用多少创建多少,但是既要数据又要地址。

HashMap

哈希表,key-value结构

www.jianshu.com/p/939b8a672…

底层

  • 1.7 是数组加链表,1.8是链表大于8之后链表为红黑树,目的是减少比较次数,提高效率

  • 链表上的每个节点就是一个Entry

    • hash哈希码
    • key键
    • value值
    • next指向下一个Entry节点
  • 默认长度16

  • 默认装填因子0.75(元素个数达到主数组长度的75%时扩容)

  • 扩容为原来的2倍,new一个新的数组,将老的数组中的数据一个个的转移,不是复制

    • jdk1.7扩容后链表中的数据顺序相反
    • 1.8扩容不会发生改变
  • 发生hash冲突,经过比较不存在相同的key元素,要添加一个新的节点。1.7不是添加在链表最后,而且最前;1.8是插在链表的尾部

  • HashSet底层就是HashMap,HashSet为HashMap的key,value为new Object()

ConcurrentHashMap

原文  https://juejin.im/post/5eef704df265da02de0b56d7
正文到此结束
Loading...