2015-04-23 92 views
3

我在某处读到我们无法将BigDecimal添加到TreeSet,因为它错误地实现了compareTo方法,例如,对于9.0和9.00,它将返回0,尽管使用equals方法它将返回false。这似乎是原因。有人可以更详细地解释一下吗?为什么我们不能将BigDecimal添加到TreeSet?

+0

我会冒昧地说BigDecimal有它的怪癖,你应该使用不同的类,如果不是'Double'那么你自己的, – vikingsteve

+2

你可以使用'TreeSet ',你只是注意到添加'1.0'和'1.00'只会将一个值添加到您的TreeSet中。根据您的使用情况,这可能或可能是可以接受的。 – assylias

+0

事实上,这不是重复的,因为在使用'TreeSet'的情况下有一个简单的解决方案,使用一个自定义比较器的构造函数:'TreeSet(比较器比较器)' – vikingsteve

回答

2

equals()在这种情况下将返回false,因为它们的精度不同。 compareTo()将返回0,因为“值”是相同的。

+0

如果解决了问题,请选择答案。 – Aakash

相关问题