Подтвердить что ты не робот

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

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

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

Но я не смог найти разницы между этими двумя типами заказов. Буду признателен, если кто-нибудь сможет объяснить это хорошим примером :)

4b9b3361

Ответ 1

Общее упорядочение означает, что все значения можно сравнить со всеми другими значениями. Например, если у вас есть коллекция BigDecimal и String, то нет естественного общего порядка (но вы можете его придумать)

В Java порядок Natural определяется как порядок, предоставляемый JVM. Это может не совпадать с тем, что люди могут поверить, - это естественный порядок. например Строки сортируются ASCIIbetically. значение Z предшествует a и 10 до 2

http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

Этот интерфейс налагает полный порядок на объекты каждого класса, который его реализует. Это упорядочение называется естественным упорядочением класса, а метод сравнения классов называется его естественным методом сравнения.

Ответ 2

Общее упорядочение - общая математическая концепция. Он отличается главным образом от частичного упорядочения тем, что для каждого a и b в множестве X либо "a <= b", либо "b <= a" имеют смысл и истинность. Что касается Java, это означает, что из двух экземпляров Comparable должно быть больше или равно другому (т.е. Имеет смысл сравнивать их).

Ответ 3

Естественный порядок

Это зависит от наших коллекций, которые мы используем, например, у нас есть объект-символ, тогда естественный порядок - это их значения в Юникоде, для чисел естественный порядок, как обычно, в порядке возрастания

Сопоставимый интерфейс- Этот интерфейс накладывает полный порядок на объекты каждого класса, который его реализует. Это упорядочение называется естественным упорядочением класса, а метод сравнения классов называется его естественным методом сравнения.

Списки (и массивы) объектов, реализующих этот интерфейс, могут быть отсортированы автоматически с помощью Collections.sort(и Arrays.sort). Объекты, реализующие этот интерфейс, могут использоваться как ключи в сортированной карте или элементы в отсортированном наборе без указания компаратора.

public interface Comparable<T> {

    /**
     * Compares this object with the specified object for order.  Returns a
     * negative integer, zero, or a positive integer as this object is less
     * than, equal to, or greater than the specified object.
     */
    public int compareTo(T o);
}

Интерфейс компаратора:

Этот интерфейс Представляет отношение порядка, которое может использоваться для сортировки списка или поддержания порядка в отсортированном наборе или карте. Можно переопределить естественный порядок типов или заказать объекты типа, которые не реализуют интерфейс Comparable.

Функция сравнения, которая налагает полное упорядочение на "некоторый набор объектов". Компараторы могут быть переданы методу сортировки (например, Collections.sort), чтобы обеспечить точное управление порядком сортировки. Компараторы также могут использоваться для управления порядком определенных структур данных (например, TreeSet или TreeMap).

    public interface Comparator<T> {
    /**
     * Compares its two arguments for order.  Returns a negative integer,
     * zero, or a positive integer as the first argument is less than, equal
     * to, or greater than the second.
     */
    int compare(T o1, T o2);

    boolean equals(Object obj);
}

Hope This helps you.                    

Ответ 4

Важная точка: естественный порядок должен быть согласуется с равными!

Сводка: естественный порядок - это один вид общего порядка, который по умолчанию используется (используется чаще всего) для данного класса и согласуется с равными. Общее упорядочение - это любое упорядочение, в котором все значения можно сравнить со всеми другими значениями.

например. когда вы создаете новый класс, вы можете выбрать естественный порядок внутри класса. Любое другое упорядочение может быть тогда только общим;)

Ответ 5

Чтобы уточнить ответ @Bruno: пример частичного упорядочения - это отношение делимости между положительными числами. Если вы сравните 5 и 15, вы можете сказать, что 5 - делитель 15, а 15 - кратный 5. Однако 3 и 5 не сопоставимы, потому что 3 не является ни делителем, ни кратным 5.

Примером полного упорядочения является меньше отношения, потому что если вы берете любые два разных числа, один из них меньше другого. Таким образом, любое значение сравнимо с любым другим значением.

О понятии естественного упорядочения: если объекты типа имеют действительно-действительно очевидный способ сортировки, то это естественный порядок. Например, естественный порядок строк - это алфавитный порядок, а естественный порядок чисел - возрастающий, потому что это первый выбор, о котором каждый мог бы подумать. Однако иногда вы хотите заказать строки по-другому, например. сортируя по длине от 1-символьных до более длинных. Это возможное полное упорядочение строк, но не естественное.

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

Ответ 6

Естественное упорядочение - это общее упорядочение по умолчанию. Это единственное различие между ними.

Ответ 7

Comparable реализации обеспечивают естественное упорядочение для класса, что позволяет автоматически сортировать объекты этого класса. (Ссылка: https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html)

Реализация Comparable интерфейса навязывает полный порядок или возможность сортировать весь массив от начала до конца.