java列表实现

时间:2012-02-20 21:31:19

标签: java

我有以下用例:

  • 包含具有各种属性的对象的列表 - 例如名称,类型,日期
  • 该列表可以包含很多元素(50k - 200k)

我想问一下,鉴于我需要在列表上进行操作,例如

,这种情况的最佳列表实现是什么?
  • 订单 - 例如按类型(按字母顺序排列)
  • 过滤 - 例如按日期
  • 没有插入
  • 子列表 - 类似于分页。

感谢。

3 个答案:

答案 0 :(得分:2)

如果您事先知道列表的大小(或上限)并且可以保证不插入,那么您需要使用ArrayList。

它由数组备份,因此查找速度很快。

答案 1 :(得分:0)

在这种情况下,

java.util.ArrayList似乎最好(由向量支持)。您需要预先做的一件事是在构造实例时保留足够的空间(如果您知道前面的元素数量,则最好),以避免在调整大小的矢量分配上进行复制。

LinkedList相比的另一个胜利是缺少节点引用,与ArrayList相比,所需的堆大小减少了大约两倍。

  • 追加:O(1)(没有插入)
  • ordering = sorting:O(n * log(n))
  • 过滤:O(n)
  • 子列表:O(1)

答案 2 :(得分:0)

单个集合类型无法满足所有这些用例。我能看到的最近的是TreeSet。

  • order - 根据类型
  • 实现您的对象以覆盖equals和hascode
  • 子列表 - headSet,tailSet
  • 过滤 - 滚动你的胜利