为何将init放入AbstractList实现能大幅提升字母异位词分组效率?
字母异位词分组实现耗时差异的原因分析
核心原因是LeetCode的计时统计范围不同,具体拆解:
- 第一种延迟初始化的实现:
groupAnagrams方法只是快速返回了一个匿名AbstractList实例,方法本身很快就执行完毕,LeetCode的耗时统计只计算到方法返回的那一刻。而真正的分组核心逻辑(init(strs))是在后续LeetCode框架调用该List的get()或size()方法时才执行的,这部分时间并没有被算入groupAnagrams方法的耗时里,所以显示的耗时极低(0ms~1ms)。 - 第二种立即初始化的实现:
init(strs)的核心分组逻辑直接在groupAnagrams方法内部执行,所有计算时间都被LeetCode统计到了方法的耗时中,因此显示的耗时明显更高(10ms~15ms)。
实际上两种实现的总执行时间(包括后续框架调用List方法的时间)是差不多的,只是延迟初始化把核心计算“转移”到了LeetCode的方法计时窗口之外,造成了耗时差异的错觉。
内容的提问来源于stack exchange,提问作者ZodiacLeo123
相关产品推荐
相关产品推荐

