2011-04-09 44 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>類似。