#java #sorting
#java #сортировка
Вопрос:
У меня есть объект пользовательского типа с именем Suffix
, который определяется как
class Suffix
{
int index;
String suff;
}
Я создаю массив объектов типа suffix
Suffix s[] = new Suffix[10];
Мне нужно отсортировать его в соответствии со строковым suff
элементом данных. Как я могу это сделать? Я не могу понять большинство пользовательских реализаций, доступных онлайн.
например: если у меня есть s [0].suff = «шляпы», s[1].suff = «ats», s[2].suff =»ts». Теперь мне нужно отсортировать этот массив на основе суффикса.
("ats",1) , ("hats",0) and ("ts",2)
должен быть порядок сортировки.
Комментарии:
1.
I need to sort it according to the string suff data member.
?? Пожалуйста, пример.
Ответ №1:
Вы можете использовать Arrays.sort(..), если ваш объект расширяет сопоставимый интерфейс.
class Suffix implements Comparable<Suffix>
{
int index;
String suff;
@Override
public int compareTo(Suffix o) {
return this.suff.compareTo(o.suff);
}
}
Теперь вы можете использовать, как показано ниже
Suffix s[] = new Suffix[10];
Arrays.sort(s);
Комментарии:
1.
implements Comparable<Suffix>
должно быть безопаснее 😉
Ответ №2:
У вас есть три возможности:
-
Напишите свой собственный алгоритм сортировки и сравните
suff
строку там. -
Реализует
Comparable<>
интерфейс в вашемSuffix
классе, переопределитеcomparteTo()
метод и используйтеArrays.sort();
, который принимает массив сравниваемых объектов в качестве параметра. -
Введите a
Comparator<>
и используйтеArrays.sort()
метод, который принимает массив и компаратор.
У третьего способа есть одно преимущество. Если вы хотите выполнить сортировку по index
вместо suff
параметра, вы можете передать sort()
методу другой компаратор.
Suffix s[] = new Suffix[10];
Comparator comp = new Comparator<Suffix>(){
@Override
public int compare(Suffix arg0, Suffix arg1)
{
return arg0.suff.compareTo(arg1.suff);
}
};
Arrays.sort(s,comp);
Вам нечего менять в вашем Suffix
классе. Подсказка: Вы можете создать дополнительный класс с вашими компараторами в виде статических полей.
Ответ №3:
Помимо использования Comparable, как сказали @insert-username-here и @vinayknl, в другом используется Comparator . Внутри метода, который вы хотите отсортировать, добавьте следующее:
Comparator comparator = new Comparator<Suffix>() {
public int compare(Object o1, Object o2) {
Suffix s1 = (Suffix) o1;
Suffix s2 = (Suffix) o2;
return s1.getSuff().compareTo(s2.getSuff());
}
}
Array.sort(s, comparator);
Примечание: не забудьте добавить getter.
Ответ №4:
Ознакомьтесь с сопоставимым интерфейсом. Этот интерфейс позволит сравнивать ваши классы в соответствии с вашими собственными критериями.
Быстрый поиск в Google выдал эту полезную страницу.