【问题标题】: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】:
去除中间元素由两部分组成:
- 寻找中间元素
- 删除该元素
ArrayList 是随机访问的O(1),因此 1st 步骤对于 Array 来说很快。虽然LinkedList 在删除时是O(1)(给定节点),所以第二步 对于List 来说很容易。
您想要的是两全其美。
IMO如果您编写自定义(或扩展现有)LinkedList,这很容易实现。您需要有额外的 middle 参考变量:
- 如果大小变得奇怪,则在插入时移动到
next。
- 如果大小变得奇数,则在删除时移至
prev。
您也可以在这两种情况下做偶数,但它们必须相同(偶数或奇数)。
【解决方案2】:
TreeSet 是否符合要求?如果提供在 O(log n) 内按键删除。