Java中对应C# Sorted List的类是什么?

4

可能是重复问题:
Java中的排序集合

我想知道Java是否有自己的排序列表版本,或者我需要创建自己的版本。我希望列表在删除某些内容时可以自动更新。例如,如果我从列表开头或中间删除某些内容,我希望其后面的所有内容都向上移动,并且剩余的空值空间被删除。

3个回答

4
如果你真的需要一个类似于.NET中的SortedList,实际上是按照键排序的映射表,那么最接近的等价物可能是TreeMap。这更像是SortedDictionary而不是SortedList,因为它是一棵树而不仅仅是一个列表,但这可能是最接近的可用选项。

然而,你所描述的更像是ArrayList,类似于.NET的List<T>


3

java.util.PriorityQueue

基于优先级堆的无界优先级队列。优先级队列的元素按照它们的自然排序或在队列构建时提供的比较器进行排序,具体取决于使用哪个构造函数。优先级队列不允许空元素。基于自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)。
这基本上是一个,它允许按顺序从前面读取,并允许通过Iterator.remove从中间删除,但迭代器不会按任何特定顺序迭代。
如果您需要按顺序遍历且不需要重复项,则{{link2:TreeSet}}是最佳选择。如果需要重复项,则可以查看类似Apache common的{{link3:TreeBag}}库。

3

嗯,Java有许多比数组更智能的列表实现,尽管从您的描述中听起来您并不需要一个排序列表。

ArrayListLinkedList将按照您的要求插入或删除元素:

public Object remove(int index) - 删除列表中指定位置的元素。将任何后续元素向左移动(其索引减少1)。

您真的需要一个排序的列表,还是只是想要比数组更高级的东西?


我已经在使用ArrayList了,所以我想这应该没问题。基本上我不想要任何空引用。我有一个循环不断地遍历这个ArrayList,所以如果有东西被移除了,我不希望出现空引用。从你的话来看,ArrayList看起来是可以的。 - Hani Honey
请仔细检查ArrayList.remove()的性能是否适用于大型数组。我曾经因从StringBuffer开头删除字符的性能问题而受挫。 - Thorbjørn Ravn Andersen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接