groovy、.find() 或 .each() 哪个更快(时间复杂度)?

Which is faster (time complexity) in groovy, .find() or .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

简短的回答是,当涉及到绩效评估时,您应该perform your tests并根据结果做出决定。

话虽如此,第一个选项搜索索引地图并且可能会更快。但是,当您使用 HashMap 作为 someMap 而不是 [:] (LinkedHashMap) 时,这种情况更有可能发生。当然,这会占用额外的内存。
第二个选项将始终线性搜索,而在哈希映射中查找以恒定时间运行。

这一切都是在实际测试结果面前的猜测,真的值得鼓励。