【问题标题】:Is it a good practice to iterate a hashmap?迭代哈希图是一种好习惯吗?
【发布时间】:2014-10-16 17:39:34
【问题描述】:

这是一个很笼统的问题,我只是举一个Java HashMap的例子。

我有一个哈希图。

Map<Integer,Integer> idPriceMap=new HashMap<Integer,Integer>();
idPriceMap.put(10,20);
idPriceMap.put(11,25);
idPriceMap.put(12,0);
idPriceMap.put(13,100);
idPriceMap.put(14,20);
idPriceMap.put(15,40);
idPriceMap.put(16,90);

要求可能不同,例如:

UseCase1:假设我知道键,我想要一个特定键的值(PS。我知道在这种情况下 HashMap 是最好的结构)

Usecase2:我想获取所有值。

现在只考虑 UseCase2。问题是:这是好的做法吗?

在另一种情况下,我同时拥有 UseCase1 和 UseCase2 两者。你有什么建议?

我尝试用谷歌搜索,我得到的只是迭代 HashMap 的最佳方法。 :(

【问题讨论】:

  • 不确定您到底在问什么?是的,hashmap 可用于通过键查找值或遍历所有值的两种情况。
  • @brso05 迭代哈希图是一种好习惯吗?我们也可以迭代一个列表,根据用例哪一个是最好的??希望我现在清楚了。
  • 如果你需要这两种情况,那么 HashMap 如果你只需要迭代,那么任何一种都可以。 HashMap 只允许key=value 键不能重复。如果您不需要访问与键关联的特定值,而只需要访问这些值本身,那么列表就可以正常工作。
  • 遍历Map 是完全正常的。为什么这是一个不好的做法?
  • “值”是什么意思,是Map接口定义的吗?

标签: java performance for-loop hash collections


【解决方案1】:

UseCase1(特定键的值):hashap 是最好的结构,是的

UseCase2(所有值):因为您想要所有值,所以不管是哈希图、列表还是树

所以我不确定你的问题是什么。但是如果你用谷歌搜索它,你可以很容易地得到不同数据结构的时间复杂度: http://en.wikipedia.org/wiki/Hash_table(见右侧大O符号)

【讨论】:

    【解决方案2】:

    如果您有混合使用场景,那么您的问题没有通用答案。这取决于您的请求的频率和分布(场景 1 或 2),以及您的地图内容的波动性。

    建议:只需使用标准哈希映射即可。然后分析您的应用程序。大多数情况下,瓶颈不是您首先期望的地方,而是通过在其他地方进行廉价更改来实现性能提升。

    如果哈希图真的是瓶颈:

    再问一遍,用你的具体使用频率;)

    如果你想做“过早的优化”(参见旧的 c2 wiki:http://c2.com/cgi/wiki?PrematureOptimization),那么只需将你的值放在一个单独的数组中,以稍微加快对完整值的请求。但是如果你有很多修改,那么你的整体性能就会下降。这就像有没有数据库索引一样......

    希望有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 2010-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      相关资源
      最近更新 更多