В чем разница между естественным порядком и критериями? JAVA

Хорошо, я знаком с темой коллекции древовидных наборов, которая имеет 2 типа упорядочения:

1.Comparable (естественный порядок), но вы должны реализовать метод CompareTo, и в этом методе вы просите упорядочить имя или что вы хотите таким образом:

 @Override

public int compareTo(Persona p1) {

    return this.getNombre().compareTo(p1.getNombre());
}

тогда это то, что дает мне сомнение, если это естественный порядок, почему мы говорим вам упорядочить по имени, из того, что я понимаю, естественный порядок сортируется при вставке в список, то есть упорядочивается в этом порядке. Но с этим методом мне кажется, что я уже упорядочиваю его по критерию, я хотел бы знать, почему они называют это естественным порядком.

2.Comparator

Там я должен создать другой класс и реализовать там метод сравнения, если я уже сортирую его по критерию

, тогда в чем разница?

0
задан 26.11.2019, 18:31
1 ответ

Вї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 критерия).

1
ответ дан 01.12.2019, 10:47