【问题标题】:is there a List implementation (in Java) that supports insertion with shifting?是否有支持移位插入的 List 实现(在 Java 中)?
【发布时间】:2010-06-05 01:58:46
【问题描述】:

假设我有一个包含元素的列表

4,7,9,17,24

我想插入 11,但要让它们保持有序。 所以我想做类似的事情

list.add(3, 11),并得到如下列表:

4,7,9,11,17,24

但如果我这样做,我会将 17 替换为 11。 你能帮忙吗?

【问题讨论】:

  • 您目前使用的是哪种实现方式?
  • 您是否在迭代列表时插入新元素?

标签: java list add


【解决方案1】:

add(int index, E element) 方法应该做你想做的事。 javadoc 是这样说的:

在此列表中的指定位置插入指定元素(可选操作)。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将它们的索引加一)。

如果没有,您正在使用错误的自定义List 实现......或者您的应用程序没有按照您认为的那样做。 (也许你用过list.set(3, 11)) ...)

【讨论】:

  • 噢噢噢,你明白了!对不起,我使用的是 set 而不是 add xD
【解决方案2】:

如果您需要有序列表,为什么不使用 TreeSet 之类的东西。它将使用对象的自然排序顺序,或者您可以传入自己的比较器。

【讨论】:

  • 排序有两种。 List 保留元素 insertion 顺序。 SortedSet(如TreeSet)基于元素值排序。 看起来 OP想要后一种......但他可能想要前一种。
  • @Stephen 你的区别是对的,在我看来,他本质上是想要一个有序的集合,但是是手动完成的(我的猜测)并且建议了另一条看起来更简单的路线。
  • 谢谢,这正是我需要的!
【解决方案3】:

【讨论】:

    【解决方案4】:

    java.util.List 接口的add 方法指定应该插入(而不是替换)对象。所以奇怪的是在你的程序中它没有被插入。

    如果您可以发布导致问题的特定代码会有所帮助

    【讨论】:

      【解决方案5】:

      如果列表很小,您可以简单地添加到列表末尾,然后调用list.sort()

      【讨论】:

      • 即使列表总是很小,也相对昂贵。
      • @Stephen C - 取决于使用情况。对于不常见的插入,它实际上是理想的
      猜你喜欢
      • 2012-10-06
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多