Понимание синтаксиса метода CompareTo () в Java - PullRequest
0 голосов
/ 25 октября 2019

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

. Теперь я использовал интерфейс Comparable и его метод compareTo для сортировки данных списка учеников по возрасту.

Ниже приведен метод compareTo, который я создал для сортировки по возрасту:

    public int compareTo(Student sNew)
    {
        return this.age-sNew.age;
    }

Здесь я не могу понять, что такое -? и как это работает?

Потому что я также сделал это, как показано ниже:

public int compareTo(Student sNew)
    {
        int returnValue=0;
        if(this.age>sNew.age)
        {
            returnValue=1;
        }else if(this.age<sNew.age){
            returnValue=-1;
        }else if(this.age==sNew.age)
        {
            returnValue=0;
        }
        return returnValue;
    }

Итак, у меня есть два сомнения: как '-' работает в CompareTo ()метод и где он возвращает значение (0,1, -1).

Пожалуйста, руководство.

Ответы [ 2 ]

7 голосов
/ 25 октября 2019

Идея заключается в том, что compareTo не возвращает 0,1, -1, но возвращает 0 (равно), положительное число (больше чем) или отрицательное (меньше).

По этой причине простое вычитание возрастов даст вам правильный ответ

0 голосов
/ 27 октября 2019

Интерфейс Comparable - это способ, которым Java выполняет трехстороннее сравнение .

Уловка, позволяющая понять семантику compareTo, заключается в следующем: a.compareTo(b) эквивалентнона вопрос Как сравнивается с b? Может быть только три ответа ( закон трихотомии ): a меньше, чем b (compareTo() возвращаетзначение меньше нуля), a равно b (compareTo возвращает нулевое значение), а a больше, чем b (compareTo возвращает значение больше нуля).

В случае общего порядка типов (целые числа, числа с плавающей запятой, даты и т. Д.) Операция a - b всегда работает из-за:

  • Если a Если a = b, операция a - b всегда будет давать ноль
  • Если a> b,операция a - b всегда будет давать значение больше нуля

В синтаксисе Java a является текущим (this объект), поэтому синтаксис равен a.compareTo(b), но идея iТо же самое.

...