【问题标题】:Does anyone have a useful mnemonic for implementing Comparator?有没有人有一个有用的助记符来实现比较器?
【发布时间】:2011-03-30 13:56:53
【问题描述】:

每次我需要实现一个比较器时,我都会卡在试图记住什么时候应该返回 -1 和什么时候返回 1,我必须查找它。

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

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

【问题讨论】:

  • 这甚至可能与语言无关。
  • 凝灰岩问题 - 我只记得壁炉边:)
  • 我预测,既然您已经花时间和精力在这个网站上写了这个问题,您会发现您不再难以记住应该返回的值。 :-D
  • 你能在你的问题中澄清你是在寻找升序还是降序的结果?

标签: java comparator mnemonics


【解决方案1】:

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

first - second

因此,如果first 小于second,您将得到负数结果,否则 - 如果它们相等,则为正数或零。

【讨论】:

  • +0:除非溢出是一个问题,在这种情况下Integer.MIN_VALUE - Integer.MAX_VALUE = 1 ;)
  • 或永远如此金灿灿的(0 - Integer.MIN_VALUE) == Integer.MIN_VALUE。 :-)
  • 我的脑子里用的是双打。这就是为什么对我来说没有平等,我通常会忘记很多细节:)
【解决方案2】:

comparator.compare(a, b) < 0 a < b

【讨论】:

  • 出于某种原因,我最喜欢这个。
【解决方案3】:

我不确定你所说的助记符是什么意思。然而,我也有过类似的认知失调。

我很直观,所以我使用数字线(我在小学时教过的数字线)。我只是将负数可视化为“左”,将 0 可视化为“中心”,将正数可视化为“右”。对应于事实:-1

【讨论】:

    【解决方案4】:

    我记得基本整数大小写(伪代码):

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

    因此,如果我们给出一个小的a 和一个大的b,这是第一个

    我的视觉记忆力更强,所以记住那个函数的“结构”对我来说很容易也很自然。

    【讨论】:

      【解决方案5】:

      我以前在实现ComparatorComparable 接口时总是检查文档。

      问题:比较 a 和 b
      让我们先看一下升序,因为降序将与我们所做的一切相反。
      问题可以翻译为给定两个数字 a 和 b,您如何将它们放在数字行上?时间>
      如果 a a 放在负端,将 b 放在正端。
      否则,如果 a = b,那么我们会将两者都放在中心(0 处)
      否则,b 将处于负面状态,a 将处于正面状态。

      比较器实现:
      在这里,您将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;
          }
      

      【讨论】:

        猜你喜欢
        • 2012-06-15
        • 2012-07-01
        • 2013-10-31
        • 2011-03-22
        • 1970-01-01
        • 2023-01-13
        • 2014-02-04
        • 2013-07-09
        • 2013-09-17
        相关资源
        最近更新 更多