和以前很多人一样,我点击IllegalArgumentException: Comparison method violates its general contract!我需要检查旧版代码以了解所有可能的情况。最好的方法是使用静态分析工具,该工具将遍历所有代码并检测可能的问题。




TimSort如何检测这些问题?
是否可以对代码进行静态分析并找到问题?
有没有这样的工具?也许作为已经存在的静态分析工具的规则?

最佳答案

当将两个运行合并在一起时,它将在合并阶段检测到它们。通常,这仅表示您的比较函数未遵循规则,例如a < bb < a同时为true,或者从所有a > bb > cc > a获取真实值。

我不知道任何静态分析工具会在这里有所帮助,但是我不确定甚至不需要它。

最好的选择就是盯住比较功能,并确保它为各种数据集返回正确的值。实际上,仅通过在所有文件中搜索Comparator来查找比较函数应该相对简单。

07-24 09:26