和以前很多人一样,我点击IllegalArgumentException: Comparison method violates its general contract!
我需要检查旧版代码以了解所有可能的情况。最好的方法是使用静态分析工具,该工具将遍历所有代码并检测可能的问题。
TimSort如何检测这些问题?
是否可以对代码进行静态分析并找到问题?
有没有这样的工具?也许作为已经存在的静态分析工具的规则?
最佳答案
当将两个运行合并在一起时,它将在合并阶段检测到它们。通常,这仅表示您的比较函数未遵循规则,例如a < b
和b < a
同时为true,或者从所有a > b
,b > c
和c > a
获取真实值。
我不知道任何静态分析工具会在这里有所帮助,但是我不确定甚至不需要它。
最好的选择就是盯住比较功能,并确保它为各种数据集返回正确的值。实际上,仅通过在所有文件中搜索Comparator
来查找比较函数应该相对简单。