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

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » ArrayList及HashMap

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址