名称 ArrayList LinkedList
底层数据结构 底层使用 Object 数组实现 jdk1.7 前使用循环双向链表实现,jdk1.7 后仅使用双向链表实现 对比:1、省去了初始化时创建 header 节点;2、frist/last 有更清晰的语义,代表链头,链尾;3、在对链表头尾进行处理时操作更便捷。
是否线程安全 非线程安全 非线程安全
是否支持快速随机访问 实现 RandomAccess 空接口,代表有快速随机访问能力(通过数组下标) 不支持快速的随机访问
内存占用 内存占用连续,会存在一定的空间浪费,主要是数组为新元素预留位置 内存占用分散,相对 ArrayList 存储相同的元素要多一些空间(用来存储前后元素位置)
插入和删除效率 末尾插入效率最高,操作越靠前元素耗时越多 (元素增删需要移动数组的其他元素) 采用链表存储,无论操作任何位置的元素耗时基本相同
结论 如果需要频繁操作 List 中元素,或在 List 中间操作建议使用 LinkedList,如果使用中访问较多操作较少可使用 ArrayList!

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:PipeSoloSymWide 等,欢迎大家加入,贡献开源。

    2818 引用 • 4207 回帖 • 644 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2088 引用 • 6943 回帖 • 1121 关注
  • 数据结构
    40 引用 • 66 回帖
感谢    关注    收藏    赞同    反对    举报    分享