关于数据结构的混淆 - 列表,集合和映射

时间:2014-05-05 06:50:20

标签: java data-structures

我已经阅读了Java Collections元素 - List, Set and Maps.根据我的研究,我发现:

enter image description here

我的发现是否正确?实际上我想了解这些系列的性能问题。如果每个集合中有add, retrieve and search个数据,那么性能会是什么?

3 个答案:

答案 0 :(得分:0)

性能取决于用例场景。例如,如果您有多次更新(删除,插入等)的记录,则应使用链接列表。如果你将遍历大型列表,你应该尝试ArrayList。如果您需要指定(例如通过id)记录,那么最佳选项是Map。 所以收集的性能取决于真实场景。了解性能的最佳方法是实现一对使用案例,并检查哪个集合有更好的时间取决于场景。 这是一个有趣的网站:http://www.programcreek.com/2013/03/arraylist-vs-linkedlist-vs-vector/

答案 1 :(得分:0)

你的问题已有提示。

  • 你提到“取决于实施”。你提到的只是界面,问题非常抽象。选择哪一个取决于您的具体用例。
  • 例如,List实施LinkedListArrayList在考虑用于频繁修改,随机访问等时的行为不同。
  • 同样,对于Map,他们的行为之间存在differences。这是他们performance comparison的链接。
  • TreeMap/Set中搜索将始终更快,因为实体已经排序。所以这一切都取决于你需要什么。在此基础上选择合适的实现方式。

答案 2 :(得分:0)

我认为你对你的发现非常严格。在网络http://bigocheatsheet.com/中,您可以看到它们之间的区别。

作为使用每个数据结构的示例,当您在键和值之间有明确的关系时使用了地图,例如,当您想要保留用户记录并且每个用户都有唯一的ID时,集合对于保留记录是有用的那些不会重复外表的东西,例如当你有某种枚举但是你需要保留比枚举名称更多的信息时,列表是默认数据结构,以保持列表记录而没有太多限制或限制,但也是效率最差的问题之一。

我强烈建议您将该页面保留在书签中,并在您熟悉它们之前每次想知道应该使用的内容。

干杯。

PD:对于兼容性问题,地图经常被反汇编成带有对象的列表或集合,例如使用JPA(地图通常比环境中的列表更难使用)。