ArrayList和LinkedList有什么区别?
ArrayList和LinkedList都实现了List接口,它们的方法和结果几乎相同。然而,它们之间几乎没有差异,这取决于要求,使一个优于另一个。
ArrayList与LinkedList
1)搜索:与LinkedList搜索操作相比,ArrayList搜索操作非常快。ArrayList中的get(int index)给出O(1)的性能,而LinkedList性能为O(n)。
原因:ArrayList维护其元素的基于索引的系统,因为它隐式使用数组数据结构,这使得搜索列表中的元素更快。另一方面,LinkedList实现了双向链表,它需要遍历所有元素来搜索元素。
2)删除:LinkedList删除操作给出O(1)性能,而ArrayList提供可变性能:在最坏的情况下O(n)(删除第一个元素)和在最好的情况下O(1)(删除最后一个元素)。
结论:与ArrayList相比,LinkedList元素删除更快。
原因:LinkedList的每个元素都维护着两个指针(地址),这些指针指向列表中的两个邻居元素。因此,移除仅需要改变将要移除的节点的两个相邻节点(元素)中的指针位置。在ArrayList中,需要移动所有元素以填充由要移除的元素创建的空间。
3)插入性能:LinkedList add方法给出O(1)性能,而ArrayList在最坏情况下给出O(n)。原因与删除说明相同。
4)内存开销:ArrayList维护索引和元素数据,而LinkedList维护元素数据和相邻节点的两个指针,因此LinkedList中的内存消耗比较高。
这些类之间的相似性很少,如下所示:
1. ArrayList和LinkedList都是List接口的实现。
2. 它们都维护元素的插入顺序,这意味着在显示ArrayList和LinkedList元素时,结果集将具有将元素插入List的相同顺序。
3. 这两个类都是非同步的,可以使用Collections.synchronizedList方法显式同步。
4. 这些类返回的迭代器和listIterator是快速失败的(如果在创建迭代器之后的任何时候对列表进行结构修改,除非通过迭代器自己的remove或add方法,迭代器将抛出 ConcurrentModificationException)。
何时使用LinkedList以及何时使用ArrayList?
1)如上所述,与 ArrayList(O(n))相比,insertList和remove操作在LinkedList中提供了良好的性能(O(1))。因此,如果在应用中需要频繁添加和删除,则LinkedList是最佳选择。
2)搜索(get方法)操作在Arraylist(O(1))中很快但在LinkedList(O(n)中)没有,因此如果添加和删除操作较少且搜索操作要求较多,则ArrayList将是您最好的选择。
猜你喜欢LIKE
相关推荐HOT
更多>>java两个日期比较相差多少天
在Java中,可以使用`java.time`包下的类来比较两个日期之间相差的天数。以下是一个示例代码:importjava.time.LocalDate;importjava.time.tempo...详情>>
2023-06-27 17:19:00find命令查找文件
"find"命令是在Unix、Linux和类似系统中使用的一个非常强大的命令,用于在文件系统中查找文件和目录。它可以根据各种条件进行搜索,并提供了灵...详情>>
2023-06-16 14:00:30如何添加Java环境变量
要添加Java环境变量,请按照以下步骤进行操作:1.打开计算机的控制面板。2.点击"系统和安全"(Windows10及更高版本)或"系统"(Windows7和较早版本...详情>>
2023-06-08 09:31:10随机函数rand怎么使用
rand是一个C++的函数,用于产生一个随机数。以下是使用rand的方法:1.头文件:需要包含stdlib.h或cstdlib头文件以使用rand函数。2.使用rand()函...详情>>
2023-04-20 15:47:10什么是面向对象编程?面向对象有什么特性
面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它将数据和操作数据的方法组合成一个单独的实体,称为“对象”,并且对...详情>>
2023-03-17 15:30:11Java培训问答更多>>
新Java行业疑惑解答:Java的内存管理是如何工作的?
新java script是什么?为什么要学java script
新java和大数据哪个好?未来哪个职业发展更好
新java培训班多久能学会?培训周期大概多久
新java script和java的区别有哪些?如何区分
新java script的数据类型主要有哪些?怎样学的更快
新c语言与java区别在哪里?去培训机构学哪个比较好
Java面试题库 更多>>
华为外包java面试题-Java实现单链表的逆序
Java程序员面试题
Java面试题及答案
什么是线程的上下文切换?
如何撤销已经推送(push)到远端仓库的提交(commit)信息?
你了解哪些加密算法?
- 北京校区
- 大连校区
- 广州校区
- 成都校区
- 杭州校区
- 长沙校区
- 合肥校区
- 南京校区
- 上海校区
- 深圳校区
- 武汉校区
- 郑州校区
- 西安校区
- 青岛校区
- 重庆校区
- 太原校区
- 沈阳校区
- 南昌校区
- 哈尔滨校区