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
) 时,这种情况更有可能发生。当然,这会占用额外的内存。
第二个选项将始终线性搜索,而在哈希映射中查找以恒定时间运行。
这一切都是在实际测试结果面前的猜测,真的值得鼓励。
所以我正在研究 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
) 时,这种情况更有可能发生。当然,这会占用额外的内存。
第二个选项将始终线性搜索,而在哈希映射中查找以恒定时间运行。
这一切都是在实际测试结果面前的猜测,真的值得鼓励。