2013-08-25 4 views
1

Я использую эту функцию в Java:Collections.sort ArrayList в Java

Collections.sort(an Arraylist, new CustomComparator); 

Сравнение методы в классе CustomComparator возвращает Int. Что это значит для процедуры сортировки? каково количество этого значения и как повлияет на процедуру сортировки?

Более конкретно, я хочу сравнить метод сравнения двух значений. Вот мой код:

import java.util.Comparator; 

    public abstract class CustomComparator implements Comparator<HLine> { 
     @Override 
     public int compare(HLine hl1, HLine hl2) { 
      return hl1.y < hl2.y; 
     } 
    } 

и я называю для сортировки:

Collections.sort(hlines, new comparator()); 

hlines является Список_массивами объекта с Точкой и два двухместный. Я хочу сравнить второй двойник в двух объектах.

+1

Вы проверили javadocs? – Reimeus

+0

Прочтите это: http://docs.oracle.com/javase/tutorial/collections/interfaces/order.html –

+0

Я не знал, пока не прочитаю ваш вопрос и не проверил документы. – Maroun

ответ

0

В основном, как указано в Javadoc из Comparator.compare и Comparable.compareTo эти методы возвращают

отрицательное целое число, нуль или положительное целое число в качестве первого аргумента меньше, равен или больше второго ,

Это означает, что если вы звоните

new Integer(1).compareTo(0) 

он возвращает отрицательное целое число, которое указывает, что 0 должен быть заказан до 1

new Integer(1).compareTo(1) 

вернет 0, что указывает, что оба значения должны быть упорядочены на одном уровне.

new Integer(1).compareTo(2) 

он возвращает положительное целое число, которое указывает, что 2 должен быть заказан после 1.

Чтобы исправить codesample, вам нужно переписать compare() так будет возвращать Integer, как это теперь он возвращает boolean и не будет компилироваться.

Потому что вы пытаетесь сравнить double S вы можете просто изменить к

@Override 
    public int compare(HLine hl1, HLine hl2) { 
     return hl1.y - hl2.y; 
    } 
-1

рода() метод сортировки элементов, но сначала они являются compared.For с целью сравнения, сортировки() метод можно использовать сравнения () или compareTo().

Теперь, если вы хотите отсортировать элементы на основе только одного атрибута, используйте метод compareTo() сопоставимого интерфейса.

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

+0

-1, потому что ни compareTo(), ни compare() не ограничивают количество атрибутов, используемых в сравнении. Единственное отличие состоит в том, что Comparable должен быть реализован в классе, который следует сравнивать.Если вы используете Компаратор, самому классу не нужно реализовывать Comparable, это полезно, если у вас есть несколько разных сравнений. – Pr0gr4mm3r

Смежные вопросы