最轻量级的Java集合

时间:2011-08-11 17:28:49

标签: java optimization collections

如果我要创建一个Java Collection,并且只想用元素填充它,然后遍历它(事先不知道必要的大小),即我需要的只是Collection<E>.add(E)和{{1我应该选择哪个具体类?例如,使用Collection<E>.iterator()而不是Set是否有任何优势?哪一个开销最小?

4 个答案:

答案 0 :(得分:21)

  

我应该选择哪个具体课程?

我可能会选择ArrayListLinkedList。两者都支持additerator方法,而且它们中的任何一个都有相当大的开销。

  

例如,使用Set而不是List是否有任何优势?

不,我不会这么说。 (除非你依赖于元素的顺序,在这种情况下你必须使用List,或者想要禁止重复,在这种情况下你应该使用Set。)

(我没有看到任何Set实现如何能够超越add / iterator方法的列表实现,所以即使我不关心顺序,我也可能会使用List。)

  

哪一个开销最小?

这听起来像是微基准测试,但是如果我被迫猜测,我会说ArrayList(或者说在ArrayLists需要经常重新分配内存的情况下的LinkedList: - )

答案 1 :(得分:3)

不要使用Set。集合和列表根据其目的而不同,在选择正确的Collection

时应始终考虑
  • List用于按照添加顺序维护元素;如果你插入两次相同的元素,它将保持两次
  • 一个Set用于保存一个特定元素一次(唯一性);订单仅与特定实施相关(如TreeSet),但“相同”的元素仍然不会添加两次

答案 2 :(得分:2)

Set仅在您要对对象进行排序并确保没有重复元素“已注册”时才有意义。另外,ArrayList就好了。

但是,如果你想在迭代时添加元素,ArrayBlockingQueue会更好。

答案 3 :(得分:1)

以下是一些关键点,可以帮助您根据您的要求选择您的收藏 -

  1. List(ArrayList或LinkedList)

    • 允许重复的值。
    • 保留了广告订单。
    • 不允许重复的值。
    • 不保留广告订单。
  2. 所以根据你的要求,List似乎是一个合适的选择。

    现在在ArrayList和LinkedList之间 -

    ArrayList是一个随机访问列表。如果频繁操作是检索元素,请使用。

    如果要在列表中添加或删除元素,

    LinkedList是最佳选项。