2012-02-20 76 views
1

我有以下用例:java的列表實現

  • 含有具有各種特性的對象的列表 - 例如名稱,類型,日期
  • 列表可以包含大量的元件(50K - 200K)

我要問什麼會是鑑於我需要做的列表,如

    上操作這種情況下,最好的列表實現3210
  • 訂單 - 例如按類型(按字母順序)
  • 過濾 - 例如按日期
  • 無插入
  • 子列表 - 類似於分頁。

謝謝。

+0

對象具有各種特性,即意味着不相關的對象類,或共享相同超類的類的對象?或者你的意思是具有不同價值屬性的對象?更具體.. – JMelnik 2012-02-20 21:37:31

+0

線程安全呢?有多少個線程會填充它? – 2012-02-20 21:38:33

+0

@SergeyBenner通常是一個,因爲它說'沒有插入'。 – 2012-02-20 21:40:34

回答

2

如果您事先知道列表(或上限)的大小並且可以保證沒有插入,那麼您需要使用ArrayList。

它由數組備份,所以查找速度很快。

0

java.util.ArrayList在這種情況下似乎最好(由矢量備份)。您需要事先做好的一件事是在構建實例時保留足夠的空間(最好是知道前面元素的數量),以避免在調整大小的向量分配上進行復制。

LinkedList相比,另一個勝利是缺少節點間引用,與ArrayList相比,所需的堆大小減少了大約兩倍。

  • 追加:O(1)(未給出插入)
  • 排序=排序:爲O(n *的log(n))
  • 過濾:爲O(n)
  • 子列表:O(1 )
0

單個集合類型不能滿足所有這些用例。我能看到的最近的是TreeSet。

  • 順序 - 實施你的對象重寫基於類型
  • 子列表equals和hascode - 耳機,tailSet
  • 過濾 - 滾動您贏了