栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

指向Java LinkedList节点的指针

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

指向Java LinkedList节点的指针

Java

List
实现不提供
O(1)
removes
*的性能。使用迭代器,您必须遍历索引(O(n)),使用遍历
ArrayList
后移(O(n)),即使它
linkedList
是双向链接列表,也不会在其中公开节点您只需简单地重新分配下一个/最后一个引用就可以直接删除它们的列表-
需要遍历才能找到要删除的节点(O(n))。

您可以编写自己的代码

MyDoublylinkedList<MyNode<T>>
,公开节点而不是其中包含的值,如果保留对节点的引用,则可以删除O(1)。索引当然是O(n)以便按索引从列表中获取内容。根据您的使用模式,这可能是一个可行的设计选择。

简而言之,如果您要使用Java提供的数据结构,请使用提供该性能的数据结构:

如果排序不重要并且没有重复的项目,请使用HashSet(但是请注意,这根本不允许直接索引)

否则,重新编写代码以使用

Map
实现可能是最好的选择。

[*]

linkedList
Deque
实现为O(1)用于去除头/尾。

编辑以添加评论:

如上所述,没有,没有O(1)时间复杂度删除操作。

原因 是,除了在最极端的情况下,它是无关紧要的。

在我5岁的3Ghz台式机上

linkedList
,通过索引(即index = length / 2)对100,000个条目的a
进行最坏情况的O(n)移除需要0.2ms(第二点)。

如果将此盒中的Windows内存管理到1,000,000个条目,由于该窗口上的Windows内存管理,我开始进入Windows交换磁盘I / O。

简而言之,您正在尝试解决大多数情况下不存在的问题。通常称为“过早优化”



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438345.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号