2011-04-09 49 views
4

可能重复的:
sorted collection in java相当于Java C#排序清单

我在想,如果Java有它自己的排序清单的版本,或者如果我需要创建我自己的。我希望列表自动更新自己,如果有东西被删除。例如,如果我从列表的开头,甚至中间删除某些东西,我希望它后面的所有东西在列表中向上移动,剩余的空值空间将被删除。

回答

3

那么,Java有很多比数组更好的列表实现,虽然它听起来并不像你真的想从你的描述中得到一个有序列表。

ArrayListLinkedList会做你想要什么,只要插入或删除元素:

public Object remove(int index) - 移除此列表中指定位置的元素。将任何随后的元素向左移(从其索引中减去一个元素)。

你真的想要一个排序列表,还是仅仅比数组更高的级别?

+0

我已经在使用一个ArrayList,所以我想它会没事的。基本上我不想要任何空引用。我有一个循环不断地通过这个ArrayList,所以如果有东西被删除,我不希望有一个空引用。从你说的看来,ArrayList看起来很好。 – 2011-04-09 18:56:38

+0

仔细检查ArrayList的性能。对于大型数组,remove()是可以接受的。我被从StringBuffer开头删除一个字符的性能所困扰。 – 2011-04-09 19:01:41

3

java.util.PriorityQueue

基于优先级堆的无界优先级队列。优先级队列的元素根据其自然顺序排序,或者由队列构建时提供的比较器进行排序,具体取决于使用哪个构造函数。优先级队列不允许空元素。依赖于自然顺序的优先级队列也不允许插入非可比对象(这样做可能导致ClassCastException)。

这基本上是一个heap,允许从前方,以便阅读,并允许通过Iterator.remove从中间去除但迭代器不以任何特定的顺序进行迭代。

如果你想要的东西,你可以迭代顺序,并不需要笨蛋,那么TreeSet是你最好的选择。如果你需要伪装,那么看看像Apache公共的TreeBag这样的库。

4

如果你是一个.NET SortedList,这实际上是由它的按键排列的地图相当于后真的,那么最接近的等效可能是TreeMap。这是实际上更像SortedDictionarySortedList,因为它是一棵树,而不仅仅是一个列表,但它可能是最接近的可用选项。

但是,您所描述的所描述的更像是ArrayList,与.NET的List<T>类似。