我想知道Java是否有自己的Sorted List版本,或者我是否需要创建自己的版本。如果删除了某些内容,我希望列表自动更新。例如,如果我从列表的开头删除某些内容,或者甚至在中间删除某些内容,我希望它背后的所有内容都在列表中向上移动,并且剩余的空值空间将被删除。
答案 0 :(得分:4)
如果你真的 之后相当于一个.NET SortedList
,它实际上是按其键排序的地图,那么最接近的等价物可能是TreeMap
。那个实际上更像SortedDictionary
而不是SortedList
,因为它是一棵树而不仅仅是一个列表,但它可能是最接近的可用选项。
但是,您描述的内容更像ArrayList
,类似于.NET的List<T>
。
答案 1 :(得分:3)
基于优先级堆的无界优先级队列。优先级队列的元素根据其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。优先级队列不允许null元素。依赖于自然排序的优先级队列也不允许插入不可比较的对象(这样做可能会导致ClassCastException)。
这基本上是一个heap,允许从前面按顺序读取,并允许从中间通过Iterator.remove
删除,但迭代器不以任何特定顺序迭代。
如果你想要的东西可以按顺序迭代,而且不需要欺骗,那么TreeSet
是你最好的选择。如果您需要欺骗,那么请查看Apache common TreeBag
等库。
答案 2 :(得分:3)
嗯,Java有很多比数组更聪明的列表实现,虽然它听起来并不像你真的想要一个从你的描述中排序的列表。
ArrayList或LinkedList会执行您想要的插入或移除元素:
public Object remove(int index)
- 删除此列表中指定位置的元素。将任何后续元素向左移位(从索引中减去一个)。
你真的想要一个排序列表,或者只是一个比数组更高级别的东西吗?