Вам не нужно использовать вызовы методов в классе, даже если поле было приватным, что не всегда известно - private ограничивает доступ к классу, а не к объекту.
Поскольку ваш метод ничего не делает, кроме как возвращает атрибут, вы можете использовать атрибут напрямую:
@Override
public int compare(ServerInfo o1, ServerInfo o2) {
/*
double datarate1=o1.getServerDataRate ();
double datarate2=o2.getServerDataRate ();
*/
double datarate1=o1.serverDataRate;
double datarate2=o2.serverDataRate;
if (datarate1 > datarate2)
return -1;
else if ( datarate1 < datarate2)
return +1;
else
return 0;
}
Но JVM может оптимизировать вызов функции, и в диапазоне 100 элементов это вряд ли будет измеримо.
Ваш метод возвращает двойное число - можете ли вы объяснить, почему?
С помощью целых чисел вы можете просто сделать:
@Override
public int compare (ServerInfo o1, ServerInfo o2) {
return o2.serverDataRate - o1.serverDataRate;
}
Но рассмотрим максимально возможные значения для вопросов о пере- и недогрузке.