当前位置: 首页 > 面试题库 >

从列表中删除范围(尾部)

洪念
2023-03-14
问题内容

是否有删除范围的有效方法-说的尾巴-从X的元素List,如LinkedList在Java中?

显然有可能一个接一个地删除最后一个元素,这将导致O(X)级性能。至少在LinkedList某些情况下,应该具有O(1)性能(通过在要删除的第一个元素周围设置参考并设置头/尾参考)。不幸的是,我看不到任何方法ListLinkedList一次全部删除最后一个元素。

目前,我正在考虑通过使用 替换
列表,List.subList()但是不确定是否具有相同的性能。至少在代码中它会更清楚,另一方面,我会松散LinkedList提供的其他功能。

我主要使用List作为堆栈,这LinkedList似乎是最好的选择,至少在语义方面。


问题答案:

subList(list.size() - N, list.size()).clear()是删除最后一个N元素的推荐方法。实际上,Javadoc
subList

特别 推荐以下惯用法:

此方法消除了对显式范围操作(数组通常存在的那种范围)的需要。通过传递subList视图而不是整个列表,可以将期望列表的任何操作用作范围操作。例如,以下成语从列表中删除了一系列元素:

 list.subList(from, to).clear();

确实,我怀疑这个惯用法可能比调用时间 有效(尽管有一个固定的因素)removeLast()
N,只是因为一旦找到了N倒数第二个节点,它只需要更新链表中恒定数量的指针,而不是一次更新每个最后一个N节点的指针。



 类似资料:
  • 问题内容: 如果我需要从List中删除一个对象(假设字符串“ abc” linkedList或ArrayList),则可以删除哪一个?(我认为两者都是相同的) ,如果我使用Linkedlist和arraylist,那么时间和空间的复杂度是多少 (我相信两者的时间复杂度都为O(n)相同) 问题答案: 两者都具有相同的时间复杂度-O(n),但是恕我直言,该版本会更快,尤其是在大型列表中,因为当您从数组

  • 问题内容: 在遍历列表时,我想根据条件删除列表中的项。请参见下面的代码。 这给了我一个例外。 如何才能做到这一点? 问题答案: 您需要使用和调用上,而不是使用循环。

  • 问题内容: 如果我有词典列表,请说: 并且我想删除具有2(或name )的字典,以编程方式解决此问题的最有效方法是什么(也就是说,我不知道列表中条目的索引,因此它可以)只是被弹出)。 问题答案: 编辑 :由于对此代码的性能提出了一些疑问(一些基于对Python的性能特征的误解,一些基于超出给定规范的假设,即列表中仅存在一个dict,其key的值为2) id”),我希望在此方面给您保证。 在旧的Li

  • 问题内容: 对此问题的任何帮助将不胜感激。 我有一个元组列表 并且我需要删除某种类型的重复项:根据我的定义,(1,2)和(2,1)被视为重复项。所需输出 提前致谢 问题答案: 您可以对它们进行排序,然后使用删除重复项:

  • 问题内容: 我在Python中有一个列表列表: 我想从中删除重复的元素。如果这是正常列表,而不是我可以使用的列表set。但不幸的是,该列表不可散列,因此无法建立一组列表。只有元组。因此,我可以将所有列表转换为元组,然后使用set并返回列表。但这不是很快。 如何以最有效的方式做到这一点? 上面的结果应为: 我不在乎保留订单。 注意:这个问题很相似,但不是我所需要的。搜索了SO,但没有找到确切的重复项

  • 问题内容: 我有一个清单,里面有空清单: 如何删除空列表,以便获得: 我尝试了list.remove(’‘),但这不起作用。 问题答案: 尝试 如果您想摆脱所有“虚假”的东西,例如空字符串,空元组,零,您也可以使用