Сортировать вектор пользовательских объектов - PullRequest
3 голосов
/ 02 апреля 2010

Я пытаюсь отсортировать вектор в java, но мой вектор не является вектором int, это вектор объектов

объект:

public MyObject() {
    numObj = 0;
    price = new Price();
    pax = new Pax();        
}

поэтому у меня есть Vector из MyObject, и я хочу заказать его по numObject, как мне это сделать, я новичок в Java?

Большое спасибо за вашу помощь.

Ответы [ 3 ]

7 голосов
/ 02 апреля 2010

Я предполагаю, что вы используете Collections.sort(..). У вас есть два варианта:

  • заставьте ваш класс реализовать Comparable
  • при сортировке создайте пользовательский Comparator

Примером реализации Comparable будет:

public class MyObject implements Comparable<MyObject> {
   // ..... other fields and methods
   public int compareTo(MyObject other) {
        return numObj - other.getNumObj();
   } 
}

Это будет означать, что элементы отсортированы в порядке возрастания. Если вам нужна другая, пользовательская сортировка, вы можете создать Comparator, который определяет пользовательское сравнение и передать его в качестве аргумента Collections.sort(..);

2 голосов
/ 02 апреля 2010

Чтобы отсортировать вектор объекта, сначала класс MyObject должен реализовать Comparable и реализовать метод compareTo (Object), затем использовать Collections.sort (Vector)

class MyObject implements Comparable<MyObject> {
    public int compareTo(MyObject a) {
       //return either 1, 0, or -1
       //that you compare between this object and object a
  ``}
}

//and in your logic write this line
Collections.sort(myVector);

проверьте JavaDoc Vector

1 голос
/ 03 апреля 2010

Реализация Comparable будет работать нормально. Тем не менее, это должно быть сделано с осторожностью, чтобы предотвратить будущие ошибки. Приведенные выше реализации отлично подходят для сортировки, но если вы позже решите поместить свои экземпляры MyObject в SortedSet (например, TreeSet), у вас будет неожиданное поведение. Элементы, которые не являются идентичными, будут сталкиваться друг с другом, если они имеют одинаковое значение элемента данных numObject. Это происходит потому, что отсортированные наборы используют реализацию Comparable (по умолчанию) для определения равенства.

Подробнее см. http://eyalsch.wordpress.com/2009/11/23/comparators/.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...