前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >杨老师带你深入研究ArrayList和LinkedList的区别不同

杨老师带你深入研究ArrayList和LinkedList的区别不同

作者头像
杨校
发布2019-03-20 09:36:38
2650
发布2019-03-20 09:36:38
举报
文章被收录于专栏:Java技术分享圈Java技术分享圈

首先来看ArrayList和LinkedList的集成类和接口的区别。

代码语言:javascript
复制
public class ArrayList<E> extends AbstractList<E> implements List<E>,
        RandomAccess, Cloneable, Serializable
            
public class LinkedList<E> extends AbstractSequentialList<E> implements
        List<E>, Deque<E>, Cloneable, Serializable

ArrayList实现了随机访问的接口,LinkedList实现了Deque双向队列的接口,最终继承的是Queue。

ArrayList是基于数据实现的list,而LinkedList是基于链表实现的list。所以,ArrayList拥有着数组的特性,LinkedList拥有着链表的特性。

优缺点   ArrayList

优点:适合随机读取的时候,读取速度快,可以一步get(index)。

缺点:添加值很慢——一方面,添加数据在array中间的时候,需要移动后面的数;另一方面,当长度大于初始长度的时候,每添加一个数,都会需要扩容。

LinkedList:双向链表

优点:添加值很快——添加在list中间也只需要更改指针;长度不固定。

实现栈和队列方面,LinkedList要优于ArrayList。

其它   LinkedList的remove(int)和remove(Object)的方法的时间复杂度都是O(n),不是O(1).因为会有一个查找的过程。

LinkedList的remove(int)要优于remove(Object),因为remove(int)在查找的时候,会从链表的中间查找,如果int比中间小,找前半部分,否则找后半部分(类似二分查找)。

ArrayList的增删比LinkedList的开销更大,因为除了有查找的时间复杂度外,还有增删的移动过程。

使用LinkedeList实现对链表的排序(sougou笔试题)

代码语言:javascript
复制
//LinkedList<Integer>实现链表的排序   使用插入排序
    public LinkedList<Integer> insertSortForLinkedList(LinkedList<Integer> list){
        int len=list.size();
        for(int i=1;i<len;i++){
            int j=i-1;
            int temp=list.get(i);
            list.remove(i);  //注意这里需要删除元素  
            while(j>=0&&temp<list.get(j)){
                j--;    
            }
            list.add(j+1,temp);
        }
        return list;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月14日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档