赞
踩
答:其实当面试问你 ArrayList、List、LinkedList 区别时,面试官并不是仅仅想问你用法区别,而是想透过这个问题来了解你对日常工作中经常用到的东西有没有稍微深入的了解和深入程度,从而看出你对技术的钻研程度和爱好。
List 是集合列表接口,ArrayList 和 LinkedList 都是 List 接口的实现类。ArrayList 是动态数组顺序表,顺序表的存储地址是连续的,所以查找比较快,但是插入和删除时由于需要把其它的元素顺序移动,所以比较耗时。LinkedList 是双向链表的数据结构,同时实现了双端队列 Deque 接口,链表节点的存储地址是不连续的,每个存储地址通过指针关联,在查找时需要进行指针遍历节点,所以查找比较慢,而在插入和删除时比较快。
1,首先,底层的数据结构不同
ArrayList底层的数据结构是数组
LinkedList底层的数据结构是双向链表
2,其次,做增删改查的差异
2.1 查询(定位)
数组是一段连续的内存空间,所以定位快
而链表需要通过上一个节点找到下一个节点,依次类推,所以定位相比数组要慢
2.2 增加
如果添加到末尾,则差异不大,
ArrayList可能会面临扩容的情况,因为底层是数组
而LinkedList只需要生成新对象,然后改变指针指向即可
如果添加到中间,
ArrayList需要将后续的元素往前挪动,所以这一块是比较耗时间的
而LinkedList则不需要,只需要改变前后对象的指针指向即可,但是寻址的时间会比ArrayList长
2.3 删除
删除的分析跟添加类似
2.4 修改
除掉首尾两个节点,ArrayList定位快,所以修改也相比LinkedList要快
3,哪种数据结构会更耗内存
LinkedList要更耗内存,因为LinkedList的节点除了保存数据本身,还需要保证两个引用指向,一个是前置,一个是后置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。