假设您需要存储/检索项目Collection,不关心订购,并且允许重复,Collection您使用什么类型的?
默认情况下,我一直使用ArrayList,但我记得在某处阅读/听到Queue实现可能是更好的选择.A List允许在任意位置添加/检索/移除项目,这会导致性能损失.由于Queue不提供这种设施,理论上在不需要该设施时应该更快.
我意识到所有关于性能的讨论都是毫无意义的,唯一真正重要的是测量.不过,我很想知道别人用什么Collection,当他们不关心订购时,允许重复,为什么?
小智 8
"这取决于".你真正需要首先回答的问题是"我想把这个集合用于什么?"
如果您经常在其中一端(开始,结束)插入/移除项目,Queue则优于a ArrayList.但是,在许多情况下,您只需从中读取即可创建一个Collection.在这种情况下,ArrayList效率更高:因为它是作为一个数组实现的,你可以非常有效地迭代它(同样适用于a LinkedList).但是,LinkedList使用引用将单个项目链接在一起.因此,如果您不需要随机删除项目(在中间),则a ArrayList更好:An ArrayList将使用更少的内存,因为项目不需要存储来引用下一个/ prev项目.
把它们加起来:
ArrayList =如果你插入一次并经常阅读(随机访问或顺序)
LinkedList =如果您经常在随机位置插入/删除并且只读顺序,那就太好了
ArrayDeque (仅限java6)=如果您在开始/结束时插入/删除并随机读取或顺序读取,则表示良好
作为默认,我倾向于更LinkedList喜欢ArrayList. 显然,我不是通过List界面来使用它们,而是通过Collection界面来使用它们。
随着时间的推移,我确实发现,当我需要一个通用集合时,或多或少需要放入一些东西,然后对其进行迭代。如果我需要更多进化的行为(例如随机访问、排序或唯一性检查),我可能会更改使用的实现,但在此之前我会将使用的接口更改为最合适的。这样,我可以确保之前提供功能,以便集中精力优化和实现。
| 归档时间: |
|
| 查看次数: |
1264 次 |
| 最近记录: |