Хорошо, я знаком с темой коллекции древовидных наборов, которая имеет 2 типа упорядочения:
1.Comparable (естественный порядок), но вы должны реализовать метод CompareTo, и в этом методе вы просите упорядочить имя или что вы хотите таким образом:
@Override
public int compareTo(Persona p1) {
return this.getNombre().compareTo(p1.getNombre());
}
тогда это то, что дает мне сомнение, если это естественный порядок, почему мы говорим вам упорядочить по имени, из того, что я понимаю, естественный порядок сортируется при вставке в список, то есть упорядочивается в этом порядке. Но с этим методом мне кажется, что я уже упорядочиваю его по критерию, я хотел бы знать, почему они называют это естественным порядком.
2.Comparator
Там я должен создать другой класс и реализовать там метод сравнения, если я уже сортирую его по критерию
, тогда в чем разница?
ВїQue различие есть между натуральной командой и из-за критерия? JAVA
, Чтобы мочь понимать различия, ты нуждаешься в том, чтобы узнать об использовании интерфейсов Comparator и Сравнимых .
1. Сравнимый интерфейс:
Этот интерфейс объявляет один mГ©todo обозначенный compareTo , а именно, этот mГ©todo ты servirГЎ, чтобы сравнивать в натуральной команде.
ВїQuГ© значит в натуральной команде?
Ответ простой, натуральная команда значит, что ты colecciГіn объектов tendrГЎ Гєnicamente один mГ©todo comparaciГіn или критерий (концепция criterio
ссылается, в который она colecciГіn sГіlo tendrГЎ способ делать сравнения).
Например: ImagГ-nate, что у тебя есть так называемый класс Persona
, с такими признаками как cedula, nombre, edad
. Позже я хочу осуществить одну colecciГіn объектов, которые он упорядочивал бы по имени. А именно, мой класс Persona
только podrГЎ упорядочивать по имени, в этом случае, podrГ, - чтобы говорить, что способ упорядочивать эту colecciГіn имеет натуральный порядок porquГ© одинокий, имеет способ упорядочивать (в этом случае он из-за nombre
из человека).
CГіdigo в java:
import java.util.*;
class Persona implements Comparable<Persona>
{
public String cedula;
public String nombre;
public int edad;
public Persona(String cedula, String nombre, int edad)
{
this.cedula = cedula;
this.nombre = nombre;
this.edad = edad;
}
//Método que va a comparar dos objetos de tipo Persona
public int compareTo(Persona perso)
{
return this.nombre.compareTo(perso.nombre);
}
}
public class Program
{
public static void main(String[] args)
{
ArrayList<Persona> l = new ArrayList<>();
l.add(new Persona("0923611701", "Maria", 23));
l.add(new Persona("0923611702", "Joel", 25));
l.add(new Persona("0923611703", "Guillermo", 21));
l.add(new Persona("0923611704", "David", 24));
//Este método me permite ordenar de forma natural o por varios criterios
Collections.sort(l);
for(Persona per : l)
{
System.out.println(per.nombre);
}
}
}
Подчеркнул, что натуральный порядок может быть команды критерием, porquГ© у одной colecciГіn может быть Гєnicamente критерий, который должен упорядочивать, а именно, форму, чтобы упорядочивать, и ты не меняешься (как случай наверху, что sГіlo рукоположен по имени).
2. Интерфейс Comparator:
Этот интерфейс объявляет, что один mГ©todo обозначенный сравнил , а именно, этот mГ©todo ты servirГЎ, чтобы сравнивать в одной colecciГіn объектов из-за нескольких критериев.
ВїQuГ© значит из-за нескольких критериев?
Значит, что одна colecciГіn tendrГЎ различные формы / способы упорядочивать. В примере наверху, возможно, что он интересует меня, что класс Persona
не только упорядочил из-за nombre
, а tambiГ©n, из-за edad
, так как в этом случае estarГ - в упорядочивая из-за критериев porquГ© это два отличных способа, которые нужно упорядочивать.
Например:
import java.util.*;
//Clase que implementa un método para ordenar por edad
class OrdenarPorEdad implements Comparator<Persona>
{
public int compare(Persona perso1, Persona perso2)
{
return perso1.edad - perso2.edad;
}
}
class Persona implements Comparable<Persona>
{
public String cedula;
public String nombre;
public Integer edad;
public Persona(String cedula, String nombre, int edad)
{
this.cedula = cedula;
this.nombre = nombre;
this.edad = edad;
}
//Método que va a comparar dos objetos de tipo Persona
public int compareTo(Persona perso)
{
return this.nombre.compareTo(perso.nombre);
}
}
public class Program
{
public static void main(String[] args)
{
ArrayList<Persona> l = new ArrayList<>();
l.add(new Persona("0923611701", "Maria", 23));
l.add(new Persona("0923611702", "Joel", 25));
l.add(new Persona("0923611703", "Guillermo", 21));
l.add(new Persona("0923611704", "David", 24));
//Este método me permite ordenar de forma natural o por varios criterios
Collections.sort(l, new OrdenarPorEdad());
for(Persona per : l)
{
System.out.println(per.edad);
}
}
}
Понимая уже концепции, мы можем решать это сомнение, что habГ-эксперт, выдвинутый ранее:
, Но с этим методом он я звучит, что уже я это упорядочиваю из-за критерия, я хотел бы знать, из-за которого они называют это натуральной командой.
И у тебя иметь весь она razГіn, это estГЎs упорядочивая из-за критерия tambiГ©n. Он vГЎlido porquГ© estГЎs используя tГ©rmino criterio
в форме singular
, это означает, что всегда tendrГЎs в классе Гєnicamente один mГ©todo comparaciГіn что sГіlo permitirГЎ реализовывать критерий (а именно, приказывать формы в одной colecciГіn объектов).
, Если ты говорил следующее:
, Но с этим методом он я звучит, что уже я это упорядочиваю из-за mГЎs критерия, я хотел бы знать, из-за которого они называют это натуральной командой.
AhГ - estarГ - в errГіneo, так как mГ©todo compareTo только служит для того, чтобы упорядочить Гєnicamente с критерием. Если ты хочешь упорядочить из-за нескольких критериев, ты нуждаешься в том, чтобы использовать mГ©todo сравнил .
ConclusiГіn:
Упорядочивать естественно одну colecciГіn dependerГЎ контекста, возможно, что в одинокой программе мне интересно упорядочивать одну colecciГіn, имея в виду Гєnicamente имя пациента (из-за того, что помещая пример) и возможно, что mГЎs он преуспевает, хочет приказать из-за возраста или из-за cГ©dula пациента (ahГ - tendrГ, - которому использовать интерфейс Comparator , это проистекает porquГ©, есть mГЎs критерия).