java list主要实现_Java中各种List的实现区别

先回顾一下List的框架图:

70e85bfd32ba

image.png

1)List 是一个接口,它继承于Collection的接口。它代表着有序的队列。 2) AbstractList 是一个抽象类,它继承于AbstractCollection。AbstractList实现List接口中除size()、get(int location)之外的函数。 3) AbstractSequentialList 是一个抽象类,它继承于AbstractList。AbstractSequentialList 实现了链表中,根据index索引值操作链表的全部方法

4)LinkedList是双向链表,同样可以被当做栈队列或双端队列使用

区别主要有:

ArrayList实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构

2) 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针

3) 对于添加和删除操作,虽然ArrayList要移动数据,ArrayList主要耗时是System.arraycopy动作,会移动index后面所有的元素;LinkedList主要耗时先通过for循环找到index,然后直接删除或插入

测试表明在数据量大时,LinkedList效率没有ArrayList效率高,越是插入位置靠后LinkedList越慢,大约总容量1/10时两者效率差不多。

所以一般首选ArrayList,LinkedList可实现队列,双端队列数据结构,所以在特定(首尾插入?)时候选用LinkedList,其余选择ArrayList效率更高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值