У кого-нибудь есть полезная мнемоника для реализации Comparator? - PullRequest
10 голосов
/ 30 марта 2011

Каждый раз, когда мне нужно реализовать компаратор, я застреваю, пытаясь вспомнить, когда я должен вернуть -1, а когда 1, и мне приходится искать его.

Я имею в виду, очевидно, что -1 равен меньше , поэтому это означает, что first меньше second. Но всякий раз, когда я говорю это себе, я получаю это нытье "ты уверен?" чувство. Я подозреваю, что часть моего замешательства связана с его реализацией наоборот, когда мне нужен нисходящий тип.

Что вы используете, чтобы запомнить, что есть что?

Ответы [ 4 ]

10 голосов
/ 30 марта 2011

Я использую эту простую мнемонику «вычитания»:

first - second

Итак, если first «меньше», чем second, вы получите отрицательный результат, в противном случае - положительный или ноль, если они равны.

5 голосов
/ 30 марта 2011

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

5 голосов
/ 30 марта 2011

Я не уверен, что вы подразумеваете под мнемоникой. Однако у меня был очень похожий когнитивный диссонанс.

Я очень нагляден, поэтому использую числовую линию (ту, которую меня учили в начальной школе). Я просто визуализирую отрицательные числа как «влево», 0 как «центр» и положительные числа как «право». Это соответствует истине: -1 <0 <1 </p>

2 голосов
/ 30 марта 2011

Я помню базовый целочисленный регистр (псевдокод):

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

Поэтому, если мы дадим маленькое значение a и большое значение b, которое является первым <последним, мы получим отрицательный результат.</p>

У меня больше зрительной памяти, поэтому запомнить «структуру» этой функции легко и естественно для меня.

...