JAVA容器浅入深出之LinkedList

List接口下的主要两个实现类, ArrayList已经讨论过了。 这次再看看LinkedList的底层实现

 

LinkedList所实现的接口和继承的父类和ArrayList差不多, 但是它多实现了一个Deque接口

 

LinkedList是基于链表实现的,其中每个元素其实是每个节点内部的element,

LinkedList只保存一个空的节点,这个节点的上一个节点就是队尾, 下一个节点就是队首

 

LinkedList的添加元素操作相对于ArrayList是非常快的,因为ArrayList需要对其实例内部的数组进行重新布局整理,而LinkedList只需要在内部的链表的某个位置插入一个节点, 这个节点的element就是插入的元素。 具体的实现是addBefore 方法,

 

而LinkedList在内部元素的随机访问上比ArrayList慢多了, 因为ArrayList是直接对内部数组进行索引的,而LinkedList是从实例内部存储的空节点(这个空节点的上一个节点是队首,下一个节点是队尾)开始遍历。 需要通过循环,对每一个节点进行访问(不但需要访问节点,还得访问节点内部的属性)。 因此速度上、效率上比ArrayList低多了

 

迭代器实现上也有区别。 ArrayList使用的还是父类AbstractList的迭代器实现

而LinkedList自己在类内部实现了迭代器。

 

LinkedList的方法有很多相似的。 也有很多1.5、 1.6之后添加的新方法, 而这些新方法仅仅是对此类内部的原有方法进行了封装。 换汤不换药!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值