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

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

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

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笔试题)

//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;
    }

分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。

目录
相关文章
|
存储 算法 安全
拜托,面试请不要再问我HashMap了
拜托,面试请不要再问我HashMap了
87 0
|
2月前
|
存储 算法 安全
ArrayList简介及使用全方位手把手教学(带源码),用ArrayList实现洗牌算法,3个人轮流拿牌(带全部源码)
文章全面介绍了Java中ArrayList的使用方法,包括其构造方法、常见操作、遍历方式、扩容机制,并展示了如何使用ArrayList实现洗牌算法的实例。
25 0
|
7月前
|
存储 算法 Java
如果面试也能这样说HashMap,那么就不会有那么多遗憾!(中)
如果面试也能这样说HashMap,那么就不会有那么多遗憾!
48 0
|
6月前
|
存储 Java 索引
杨老师课堂之ArrayList集合解析
杨老师课堂之ArrayList集合解析
29 0
|
6月前
|
存储 Java 测试技术
杨校老师课堂之Java基础集合专题知识点整理
杨校老师课堂之Java基础集合专题知识点整理
27 0
|
6月前
|
存储 Java
深入Java List:探寻有序集合背后的故事
【6月更文挑战第17天】Java List接口,作为有序集合,用于数据存储与处理。ArrayList和LinkedList是常见实现类:ArrayList基于数组,适合随机访问但插入删除慢;LinkedList基于链表,插入删除快但随机访问效率低。在需要频繁在开头插入元素并高效访问时,应选用LinkedList。了解这些原理能帮助优化代码性能。
39 0
|
7月前
|
存储 机器学习/深度学习 算法
如果面试也能这样说HashMap,那么就不会有那么多遗憾!(上)
如果面试也能这样说HashMap,那么就不会有那么多遗憾!
71 1
|
7月前
|
存储 Java 索引
如果面试也能这样说HashMap,那么就不会有那么多遗憾!(下)
如果面试也能这样说HashMap,那么就不会有那么多遗憾!
167 0
|
Java
【牛客刷题】每日一练—ArrayList的实例强化
【牛客刷题】每日一练—ArrayList的实例强化
92 0
【牛客刷题】每日一练—ArrayList的实例强化
|
存储 安全 NoSQL
《面试知识,工作可待:集合篇》-java集合面试知识大全
在工作上必须保持学习的能力,这样才能在工作得到更好的晋升,涨薪指日可待,欢迎一起学习【提升能力,涨薪可待】系列
184 0
《面试知识,工作可待:集合篇》-java集合面试知识大全

热门文章

最新文章