Groovy,.find或.each中哪个更快时间复杂度?

问题描述

因此,我正在研究使用groovy中的哪种方法可以更快地得出结果。

假设我们有: def storage = [{item:"apple",amount:3,color: "red"},{item:"mango",amount:5,color: "yellow"}]

在这样做:

def someMap = [:]
storage.each {
   someMap[it.item] = [amount: it.amount,color: it.color]
}

因此,当我们需要获取一件物品的数量时,我们可以这样做: someMap["apple"].amount

比这更好吗? :

def storageFindByItem = { itemName ->
  return storage.find{
    i -> i.item == itemName
  }
} 

因此,当我们需要获取一件物品的数量时,我们可以这样做: storageFindByItem("apple").amount

解决方法

简短的答案是,在进行绩效评估时,您应该cpr并根据结果做出决定。

话虽如此,第一个选项将搜索索引地图,并且可能会更快。但是,当您将HashMap用于someMap而不是[:]LinkedHashMap)时,这种可能性更大。当然,这会占用更多的内存。
第二个选项将始终是线性搜索,而在哈希图中查找的时间是恒定的。

所有这些都可能是面对实际测试结果的猜测,这确实值得鼓励。