【发布时间】:2010-06-05 01:58:46
【问题描述】:
假设我有一个包含元素的列表
4,7,9,17,24
我想插入 11,但要让它们保持有序。 所以我想做类似的事情
list.add(3, 11),并得到如下列表:
4,7,9,11,17,24
但如果我这样做,我会将 17 替换为 11。 你能帮忙吗?
【问题讨论】:
-
您目前使用的是哪种实现方式?
-
您是否在迭代列表时插入新元素?
假设我有一个包含元素的列表
4,7,9,17,24
我想插入 11,但要让它们保持有序。 所以我想做类似的事情
list.add(3, 11),并得到如下列表:
4,7,9,11,17,24
但如果我这样做,我会将 17 替换为 11。 你能帮忙吗?
【问题讨论】:
add(int index, E element) 方法应该做你想做的事。 javadoc 是这样说的:
在此列表中的指定位置插入指定元素(可选操作)。将当前位于该位置的元素(如果有)和任何后续元素向右移动(将它们的索引加一)。
如果没有,您正在使用错误的自定义List 实现......或者您的应用程序没有按照您认为的那样做。 (也许你用过list.set(3, 11)) ...)
【讨论】:
如果您需要有序列表,为什么不使用 TreeSet 之类的东西。它将使用对象的自然排序顺序,或者您可以传入自己的比较器。
【讨论】:
List 保留元素 insertion 顺序。 SortedSet(如TreeSet)基于元素值排序。 看起来 OP想要后一种......但他可能想要前一种。
浏览一下 Collections 文档,看看是否能找到适合您需求的文档:
http://java.sun.com/javase/7/docs/api/java/util/LinkedList.html
http://java.sun.com/docs/books/tutorial/collections/implementations/list.html
【讨论】:
java.util.List 接口的add 方法指定应该插入(而不是替换)对象。所以奇怪的是在你的程序中它没有被插入。
如果您可以发布导致问题的特定代码会有所帮助
【讨论】:
如果列表很小,您可以简单地添加到列表末尾,然后调用list.sort()
【讨论】: