У меня есть вопрос относительно интерфейса компаратора. Ниже моего класса реализуется интерфейс для сортировки строк по длине вместо сортировки по умолчанию, которая сортируется по значению символа.Интерфейс компаратора Java и инициализационный компаратор
После переопределения сравнения по умолчанию я использовал Arrays.sort()
для сортировки моего массива строк. Несмотря на то, что я переопределил метод по умолчанию, если я использую Arrays.sort, он вызывает сравнение по умолчанию вместо моего переопределенного метода. Это потому, что я прямо называю метод суперкласса?
Другой вопрос - инициализация самого интерфейса. Я знаю, что вы не можете инициализировать интерфейс и вместо этого инициализировать объект класса (который реализует указанный интерфейс), чтобы ссылаться на методы, доступные для интерфейса. В этом случае, когда я инициализирую компаратор, Arrays.sort(strArr, new Ideone());
сортировка работает правильно. Как метод знает, что я передаю ему компаратор? Я только инициализировал объект класса и не вызывал метод compare(ob1, ob2)
явно.
Даже если я делаю Comparator x = new Ideone();
, как объект класса сводится к объекту компаратора? Любое объяснение этому было бы полезно.
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone implements Comparator
{
static String ThirdGreatest(String[] strArr)
{
Arrays.sort(strArr);
//Arrays.sort(strArr, new Ideone());
for(String x: strArr)
{
System.out.println(x);
}
return strArr[strArr.length-3];
}
@Override
public int compare(Object s1, Object s2)
{
return (s1.toString().length() - s2.toString().length());
}
public static void main (String[] args) throws java.lang.Exception
{
String[] myarr = {"coder","byte","code", "asfasfasfasf"};
System.out.println(ThirdGreatest(myarr));
}
}
Вы не сказали, что хотите использовать ваш компаратор. Это также странный способ настройки компаратора. См. Http://stackoverflow.com/questions/8632857/sorting-string-lengths-using-comparator для примера. – jarmod
Возможно, вы захотите проверить, что 'strArr' имеет как минимум 3 элемента. –
Я рекомендую отделить реализацию компаратора от вашего основного класса. Легче понять, когда компаратор является только компаратором и в нем нет посторонних статических методов. – dsh