做网站的投入,搭建一个服务器买域名做网站,wordpress分享型主题模板,vue 做电商网站ArrayList和LinkedList的区别【大白话Java面试题】
大白话回答
arraylist和linkedlist的区别是#xff1a;数据结构不同#xff0c;效率不同#xff0c;自由性不同#xff0c;主要控件开销不同 数据结构不同 ArrayList是Array(动态数组)的数据结构#xff0c;LinkedList…ArrayList和LinkedList的区别【大白话Java面试题】
大白话回答
arraylist和linkedlist的区别是数据结构不同效率不同自由性不同主要控件开销不同 数据结构不同 ArrayList是Array(动态数组)的数据结构LinkedList是Link(链表)的数据结构。 效率不同 当随机访问Listget和set操作时ArrayList比LinkedList的效率更高因为LinkedList是线性的数据存储方式所以需要移动指针从前往后依次查找。 当对数据进行增加和删除的操作(add和remove操作)时LinkedList比ArrayList的效率更高因为ArrayList是数组所以在其中进行增删操作时会对操作点之后所有数据的下标索引造成影响需要进行数据的移动。 自由性不同 ArrayList自由性较低因为它需要手动的设置固定大小的容量但是它的使用比较方便只需要创建然后添加数据通过调用下标进行使用而LinkedList自由性较高能够动态的随数据量的变化而变化但是它不便于使用。 主要控件开销不同 ArrayList主要控件开销在于需要在List列表预留一定空间而LinkList主要控件开销在于需要存储节点信息以及节点指针。 详细描述 ArrayList是实现了基于动态数组的数据结构LinkedList基于链表的数据结构。
对于随机访问get和setArrayList觉得优于LinkedList因为LinkedList要移动指针。
对于新增和删除操作add和removeLinedList比较占优势因为ArrayList要移动数据。
ArrayList内部使用数组的形式实现了存储实现了RandomAccess接口利用数组的下面进行元素的访问因此对元素的随机访问速度非常快。
因为是数组所以ArrayList在初始化的时候有初始大小10插入新元素的时候会判断是否需要扩容扩容的步长是0.5倍原容量扩容方式是利用数组的复制因此有一定的开销
另外ArrayList在进行元素插入的时候需要移动插入位置之后的所有元素位置越靠前需要位移的元素越多开销越大相反插入位置越靠后的话开销就越小了如果在最后面进行插入那就不需要进行位移。 LinkedList内部使用双向链表的结构实现存储LinkedList有一个内部类作为存放元素的单元里面有三个属性用来存放元素本身以及前后2个单元的引用另外LinkedList内部还有一个header属性用来标识起始位置LinkedList的第一个单元和最后一个单元都会指向header因此形成了一个双向的链表结构。
LinkedList是采用双向链表实现的。所以它也具有链表的特点每一个元素结点的地址不连续通过引用找到当前节点的上一个节点和下一个节点即插入和删除效率较高只需要常数时间而get和set则较为低效。
LinkedList的方法和使用和ArrayList大致相同由于LinkedList是链表实现的所以额外提供了在头部和尾部添加/删除元素的方法也没有ArrayList扩容的问题了。另外ArrayList和LinkedList都可以实现栈、队列等数据结构但LinkedList本身实现了队列的接口所以更推荐用LinkedList来实现队列和栈。