如果我要创建一个Java Collection,并且只想用元素填充它,然后遍历它(事先不知道必要的大小),即我需要的只是Collection<E>.add(E)
和{{1我应该选择哪个具体类?例如,使用Collection<E>.iterator()
而不是Set
是否有任何优势?哪一个开销最小?
答案 0 :(得分:21)
我应该选择哪个具体课程?
我可能会选择ArrayList
或LinkedList
。两者都支持add
和iterator
方法,而且它们中的任何一个都有相当大的开销。
不,我不会这么说。 (除非你依赖于元素的顺序,在这种情况下你必须使用List,或者想要禁止重复,在这种情况下你应该使用Set。)例如,使用Set而不是List是否有任何优势?
(我没有看到任何Set实现如何能够超越add / iterator方法的列表实现,所以即使我不关心顺序,我也可能会使用List。)
哪一个开销最小?
这听起来像是微基准测试,但是如果我被迫猜测,我会说ArrayList(或者说在ArrayLists需要经常重新分配内存的情况下的LinkedList: - )
答案 1 :(得分:3)
不要使用Set
。集合和列表根据其目的而不同,在选择正确的Collection
List
用于按照添加顺序维护元素;如果你插入两次相同的元素,它将保持两次Set
用于保存一个特定元素一次(唯一性);订单仅与特定实施相关(如TreeSet
),但“相同”的元素仍然不会添加两次答案 2 :(得分:2)
Set
仅在您要对对象进行排序并确保没有重复元素“已注册”时才有意义。另外,ArrayList
就好了。
但是,如果你想在迭代时添加元素,ArrayBlockingQueue
会更好。
答案 3 :(得分:1)
以下是一些关键点,可以帮助您根据您的要求选择您的收藏 -
List(ArrayList或LinkedList)
集
所以根据你的要求,List似乎是一个合适的选择。
现在在ArrayList和LinkedList之间 -
ArrayList是一个随机访问列表。如果频繁操作是检索元素,请使用。
如果要在列表中添加或删除元素,LinkedList是最佳选项。