相关疑难解决方法(0)

为什么指定BigDecimal.equals分别比较值和比例?

这不是关于如何比较两个BigDecimal对象的问题 - 我知道你可以使用compareTo而不是equals这样做,因为equals记录为:

与compareTo不同,此方法仅考虑两个BigDecimal对象的值和比例相等(因此通过此方法比较时2.0不等于2.00).

问题是:为什么equals以这种看似违反直觉的方式指定了?也就是说,为什么能够区分2.0和2.00 很重要

似乎必须有这样的理由,因为Comparable指定compareTo方法的文档指出:

强烈建议(尽管不要求)自然排序与equals一致

我想必须有一个很好的理由忽略这个建议.

java bigdecimal

33
推荐指数
5
解决办法
1万
查看次数

等于和可比较集

我在这里发布了一些代码,正确解决了海报的问题.OP希望删除重复项并将某些特殊项目放在列表顶部.我使用了TreeSet一个特殊的Comparable课程,它包含了Locale他们正在努力实现他们想要的东西.

然后我开始思考......正如你所做的那样...我通过0compareTo方法返回来消除重复,而不是trueequals实现返回,因为需要做的是正确地指示副本Set(从定义中)Set).

我不反对使用这种技术但是我使用的是什么可能被视为无证件的功能?我可以安全地假设继续这样做会继续发挥作用吗?

java equals compareto comparable treeset

10
推荐指数
1
解决办法
1万
查看次数

三合会没有出现在战斗中?(Java Set缺少一个项目)

我有来自两家公司asoft和bsoft的代码.我也无法改变.这是我的情况的简化版本,我非常确定有足够的信息来查找导致问题的原因.

bsoft提供IGang,代表一个可以与其他帮派作战的团伙.

package bsoft;

public interface IGang {
    /** @return negative, 0, or positive, respectively
     *          if this gang is weaker than, equal to, or stronger
     *          than the other
     */
    public int compareTo(IGang g);
    public int getStrength();
    public String getName();
    public void attack(IGang g);
    public void weaken(int amount);
}
Run Code Online (Sandbox Code Playgroud)

asoft提供GangWar,允许IGangs战斗:

package asoft;
import java.util.*;
import bsoft.*;
/** An `IGang` ordered by identity (name) */
public interface ComparableGang extends IGang, Comparable<IGang> {}

package asoft; …
Run Code Online (Sandbox Code Playgroud)

java interface set diamond-problem

2
推荐指数
1
解决办法
417
查看次数