有没有人有一个有用的助记符来实现Comparator?

时间:2011-03-30 13:56:54

标签: java comparator mnemonics

每次我需要实现一个比较器时,我都会陷入困境,试图记住何时应该返回-1和1时,我必须查找它。

我的意思是,显然-1是 less ,因此它意味着first小于second。但每当我对自己这么说时,我都会唠叨“你确定吗?”感觉。我怀疑我的困惑部分来自于在我需要降序时反过来实现它。

你用什么来记住哪个是哪个?

5 个答案:

答案 0 :(得分:10)

我使用这个简单的“减法”助记符:

first - second

因此,如果first“小于”second,您将获得否定结果,否则 - 如果相等则为正数或零。

答案 1 :(得分:5)

我不确定您的助记符是什么意思。但是,我的认知失调非常相似。

我非常直观,所以我使用数字线(我在小学就读的那个)。我只是将负数可视化为“左”,将0视为“中心”,将正数视为“右”。这对应于事实:-1< 0< 1

答案 2 :(得分:5)

comparator.compare(a, b) < 0&lt; ==&gt; a < b

答案 3 :(得分:2)

我记得基本整数情况(伪代码):

int comparator(int a, int b) {
   return a-b;
}

因此,如果我们提供一个小a和一个大b,这是第一个&lt;最后我们得到了一个否定的结果。

我有更多的视觉记忆,所以记住这个功能的“结构”对我来说既简单又自然。

答案 4 :(得分:0)

我过去常常在实现 ComparatorComparable 接口时查看文档。

问题:比较a和b
让我们先看看升序,因为降序将与我们所做的一切相反。
问题可以翻译成给定两个数字a和b,你会怎么把它们放在数轴上?
如果 a < b,那么我们将把 a 放在消极的一边,把 b 放在积极的一边。
否则如果 a = b 那么我们将两者都放在中心(在 0)
否则 b 将在消极方面,a 将在积极方面。

enter image description here

比较器实现:
在这里,您将 ab 进行比较。

 @Override
    public int compare(MyClass a, MyClass b) { //always good to rename your variables like this to be consistent 
        return a.f1 - b.f1; 
    }

可比实现:
在这里,您将 thisother 进行比较。

@Override
    public int compareTo(MyClass other) { // this is same as compare(this, other)
        return this.f1 - o.f1;
    }