在Java中使用List vs Map的性能优势

时间:2017-10-04 09:58:15

标签: java

我一直想知道使用列表的实际好处是什么。请注意,我的问题不是“何时使用什么”,而是如果我坚持将地图作为我的主要对象,是否对性能有任何影响

显然,如果我的目标是仅仅研究价值观

  

在乍一看我的意图不清楚之后更新:我的意思是   如果我只想过滤年龄为> 8000的人的列表? 30,我   会使用一个列表...但我可以使用地图而不是使用它   相反 - 我的问题是 - 会有任何性能障碍吗?

我也会使用List。但是我们是否会得到任何性能提升 - 如果是的话 - 我怎么能亲自看到它。

例如,如果我采取

List <Integer> listOfInt = new ArrayList<>(map.values());

将Map用作我的全局对象并基于它提供列表是有意义的。

我知道在地图中插入或删除的键/值O(1)运行时,但是为什么列表是我所见过的大多数地方的首选。

2 个答案:

答案 0 :(得分:4)

  

我的问题不是“何时使用什么”

但它应该。列表和地图有不同的用途。列表是 - 好 - 没有任何显式键的值列表。列表中的项目由其位置指定。

  

显然,如果我的目标只是处理价值观,我也会使用List。

是的,这是正确的

  

但我们是否能获得任何性能提升

请注意。地图不是一个简单的结构。对于地图中的每个项目,创建一个“Entry”对象,其中引用了键和值对象,创建了一个哈希数组等。所以使用map你肯定会使用更多的内存和代码。对于更简单的情况,性能差异可以忽略不计

答案 1 :(得分:1)

这取决于用例。使用您的示例,它可以改变用法,例如,如果您想要访问特定对象。列表的访问时间为O(n),而地图的访问时间为O(1)

如果您不关心对象的特定检索,可以使用List