1. 是否保证线程安全: ArrayList 和 LinkedList 都是不同步的,也就是不保证线程安全;
  2. 底层数据结构: Arraylist 底层使用的是Object数组;LinkedList 底层使用的是双向链表数据结构(JDK1.6之前为循环链表,JDK1.7取消了循环。);
  3. 插入和删除是否受元素位置的影响:
    ① ArrayList 采用数组存储,所以插入和删除元素的时间复杂度受元素
    位置的影响。 比如:执行 add(E e) 方法的时候, ArrayList 会默认在将指定的元素追加到此列表的末尾,这种
    情况时间复杂度就是O(1)。但是如果要在指定位置 i 插入和删除元素的话( add(int index, E element) )时
    间复杂度就为 O(n-i)。因为在进行上述操作的时候集合中第 i 和第 i 个元素之后的(n-i)个元素都要执行向后位/向
    前移一位的操作。
    ② LinkedList 采用链表存储,所以插入,删除元素时间复杂度不受元素位置的影响,都是
    近似 O(1)而数组为近似 O(n)。
  4. 是否支持快速随机访问: LinkedList 不支持高效的随机元素访问,而 ArrayList 支持。快速随机访问就是通过元素的序号快速获取元素对象(对应于 get(int index) 方法)。
  5. 内存空间占用: ArrayList的空 间浪费主要体现在在list列表的结尾会预留一定的容量空间,而LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间(因为要存放直接后继和直接前驱以及数
    据)。
public interface RandomAccess {}

补充: RandomAccess接口
源码中,RandomAccess 接口中什么都没有定义。所以,RandomAccess 接口不过是一个标识罢了。标识什么? 标识实现这个接口的类具有随机访问功能。
在binarySearch()方法中,它要判断传入的list 是否RamdomAccess的实例,如果是,调用indexedBinarySearch()方法,如果不是,那么调用iteratorBinarySearch()方法ArrayList 实现了 RandomAccess 接口, 而 LinkedList 没有实现。为什么呢?还是和底层数据结构有关!
ArrayList 底层是数组,而 LinkedList 底层是链表。数组天然支持随机访问,时间复杂度为 O(1),所以称为快速随机访问。链表需要遍历到特定位置才能访问特定位置的元素,时间复杂度为 O(n),所以不支持快速随机访问。
ArrayList 实现了 RandomAccess 接口,就表明了他具有快速随机访问功能。 RandomAccess 接口只是标识,并不是说 ArrayList 实现RandomAccess 接口才具有快速随机访问功能的!

list 的遍历方式选择:
实现了RandomAccess接口的list,优先选择普通for循环 ,其次foreach,
未实现RandomAccess接口的list, 优先选择iterator遍历(foreach遍历底层也是通过iterator实现的),大size的数据,谨慎使用普通for循环
补充:数据结构基础之双向链表。

public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) {if (list instanceof RandomAccess || list.size() < BINARYSEARCH_THRESHOLD){return Collections.indexedBinarySearch(list, key);}else{return Collections.iteratorBinarySearch(list, key);}
}

java面试题 Arraylist 与 LinkedList比较相关推荐

  1. 深入理解java中的ArrayList和LinkedList

    杂谈最基本数据结构--"线性表": 表结构是一种最基本的数据结构,最常见的实现是数组,几乎在每个程序每一种开发语言中都提供了数组这个顺序存储的线性表结构实现. 什么是线性表? 由0 ...

  2. Java集合:ArrayList和LinkedList区别?

    ArrayList和LinkedList的大致区别如下: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构.  2.对于随机访问get和set,ArrayL ...

  3. 【java学习】Arraylist和LinkedList使用场景与性能对比

    介绍 ArrayList LinkedList 使用场景对比 两个实例: 二分查找 插入元素 总结 介绍 List 的三个子类的特点: ArrayList 底层结构是数组,底层查询快,增删慢. Lin ...

  4. 【Java 集合】ArrayList、LinkedList、Stack、Queue、Set、Map, 迭代器 Iterable、Iterator,Collections类

    集合类型 数组的局限性 ArrayList(常用方法 + 基本使用) ArrayList - retainAll ArrayList - toArray ArrayList 的遍历(5种) Array ...

  5. JAVA手写ArrayList以及LinkedList

    手写记录一下~ 顶级接口List public interface List<E> {//返回线性表的大小public int getSize();//判断线性表中是否为空public b ...

  6. 耗时108天,终于有人把金九银十面试必问的1309道Java面试题全部整理出来了

    就目前大环境来看,跳槽成功的难度比往年高很多.一个明显的感受:互联网行业竞争越来越严峻,面试也是越来越难,不少大厂,如阿里.腾讯.华为的招聘名额明显减少,面试门槛却一再拔高,其实,要想生存下去,势必要 ...

  7. java面试题29 牛客 以下关于集合类ArrayList、LinkedList、HashMap描述

    java面试题29 牛客 以下关于集合类ArrayList.LinkedList.HashMap描述错误的是() A HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或 ...

  8. ArrayList、LinkedList哪家强,据说90,亚信科技Java笔试题

    结果:ArrayList----time:2493 public static void main(String[] args) { List list = new ArrayList<> ...

  9. 复习Java.Lang包Java面试题Vector、ArrayList、LinkedList区别生活【记录一个咸鱼大学生三个月的奋进生活】007

    记录一个咸鱼大学生三个月的奋进生活007 复习Java(Lang包) 数据包装类 字符类Character的常用方法 字符串类(String) StringBuffer类的常用方法 Math类的常用方 ...

最新文章

  1. 看oracle 的数据库位数
  2. Qt动态多语言的实现(VS2012开发)
  3. delphi7下安装TMS component
  4. java oracle 连接字符串函数_通过shell来比较oracle和java中的字符串使用
  5. html注册跳转php错误500,页面跳转后提示HTTP 异常 500(Internal Server Error):服务器尝试执行请求时遇到了意外情况...
  6. 4-3 面向复用的设计模式
  7. border_mode
  8. Codeforces Round #277 (Div. 2)
  9. 对倒立摆的LQR控制
  10. ppt convert to html,powerpoint(ppt)
  11. 数学建模——stata基础操作
  12. t3财务软件服务器停止运行,用友T3标准版已停止工作应该怎么办
  13. lighttpd服务器404页修改,教你学会Lighttpd的安装配置
  14. 计算机应用能力提升研修计划,教师信息技术应用能力提升培训个人研修计划.doc...
  15. 同城双活与异地多活架构分析
  16. 给大家分享几款浪漫的唯美APP
  17. 地理信息技术类毕业论文文献有哪些?
  18. mysql 异地备份脚本_MySQL异地备份脚本
  19. yum完全配置及createrepo详解
  20. 学会Python后利用WiFi就可以获取妹子的微信号啦

热门文章

  1. springboot解决第三方依赖jar包的问题
  2. CORS 跨域 实现思路及相关解决方案
  3. win11如何登陆本地用户 windows11登陆本地用户的步骤方法
  4. Intellij Idea选中内容后Backspace删除无法使用,Ctrl+c/Ctrl+v/Ctrl+s/Ctrl+d等等快捷键无法使用的问题的解决
  5. spring页面使用注解@RequestParam把请求参数封装到map中
  6. Window+Java环境证书生成说明,pfx证书已经生成
  7. JQ实现 todolist案例(记事本)
  8. 如何修改WampServer服务器上传文件的大小?
  9. input 限制只能输入数字,且保留小数后两位
  10. 旷视科技提出双向网络BiSeNet:实现实时语义分割