【问题标题】:Best way to go about removing middle element from list or arraylist in java?从java中的列表或arraylist中删除中间元素的最佳方法?
【发布时间】:2018-06-03 11:34:18
【问题描述】:

我需要从排序数据中顺序删除中间元素。最好的方法是什么?由于 LinkedList 操作需要 n/2 时间来删除元素,因此 arraylist 会更快。但是另一方面,arraylist 需要时间将所有元素向左移动,这也不是有效的。其他数据结构可能有用吗?

【问题讨论】:

  • 还需要进行哪些其他操作?

标签: java arrays list arraylist data-structures


【解决方案1】:

去除中间元素由两部分组成:

  1. 寻找中间元素
  2. 删除该元素

ArrayList 是随机访问的O(1),因此 1st 步骤对于 Array 来说很快。虽然LinkedList 在删除时是O(1)(给定节点),所以第二步 对于List 来说很容易。

您想要的是两全其美

IMO如果您编写自定义(或扩展现有)LinkedList,这很容易实现。您需要有额外的 middle 参考变量:

  • 如果大小变得奇怪,则在插入时移动到 next
  • 如果大小变得奇数,则在删除时移至 prev

您也可以在这两种情况下做偶数,但它们必须相同(偶数或奇数)。

【讨论】:

    【解决方案2】:

    TreeSet 是否符合要求?如果提供在 O(log n) 内按键删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 2021-08-10
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      相关资源
      最近更新 更多