2012-04-13 7 views
7

Так что я хочу, чтобы арраист объектов в java.Как отсортировать arraylist объектов java?

У меня есть object1.number и object2.number, object3.number и т.д ... но эти объекты имеют другие свойства, кроме number, такие как name, distance и т.д ...

Так что, если он разбирал строку в array это было бы просто положить строку в temporal, и пусть другая строка займет свое место ... но в объектах araryList, как я могу это сделать?

Могу ли я просто переместить объекты в это положение массива?

Спасибо.

+2

ли ваш профессор хочет вам реализовать сортировочный алгоритм самостоятельно? –

+0

то, что @joncarl говорит, является хорошим моментом, если вам нужно смотреть на bubblesort (его довольно легко реализовать, но не так быстро) –

+0

Да, я буду реализовывать сортировку сортировки. – user1253201

ответ

0

Для этой цели вам необходимо использовать компаратор.

4

Вы должны реализовать сопоставимый интерфейс

implements Comparable

метод, который делает работа является

public int compareTo(Object obj) 
{ 
} 

Пожалуйста, обратите внимание, что объект часто заменяются полностью на типа из-за общий синтаксис который может быть использован в заявке на выполнение (показано ниже).

Полный пример here in the tutorial docs надеюсь, что это помогает

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

import java.util.*; 

public class Name implements Comparable<Name> { 
    private final String firstName, lastName; 

    public Name(String firstName, String lastName) { 
     if (firstName == null || lastName == null) 
      throw new NullPointerException(); 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String firstName() { return firstName; } 
    public String lastName() { return lastName; } 

    public boolean equals(Object o) { 
     if (o == null || !(o instanceof Name)) 
      return false; 
     Name n = (Name) o; 
     return n.firstName.equals(firstName) && n.lastName.equals(lastName); 
    } 

    public int hashCode() { 
     return 31*firstName.hashCode() + lastName.hashCode(); 
    } 

    public String toString() { 
    return firstName + " " + lastName; 
    } 

    public int compareTo(Name n) { 
     int lastCmp = lastName.compareTo(n.lastName); 
     return (lastCmp != 0 ? lastCmp : firstName.compareTo(n.firstName)); 
    } 
} 

клиентский код из статьи:

import java.util.*; 

public class NameSort { 
    public static void main(String[] args) { 
     Name nameArray[] = { 
      new Name("John", "Smith"), 
      new Name("Karl", "Ng"), 
      new Name("Jeff", "Smith"), 
      new Name("Tom", "Rich") 
     }; 

     List<Name> names = Arrays.asList(nameArray); 
     Collections.sort(names); 
     System.out.println(names); 
    } 
} 
0

Основываясь на ваш вопрос, я понимаю, что вы должны быть реализации алгоритма сортировки самостоятельно. Если это так, вы можете манипулировать положением элементов в ArrayList, он просто немного отличается от обычного массива. Посмотрите на add(int index, E element). Параметр index позволяет вам решить, где в ArrayList добавить элемент.

+0

Я думаю, вы хотите направить его на метод set вместо метода add. метод add, слайд-элементы вместо их замены. –

+0

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

+0

Если вы не смотрите на сортированный массив и добавляете новые элементы, использование add() будет иметь скрытые штрафы за производительность, потому что ему нужно переместить все элементы с более высокими индексами. То же самое относится к remove(). Использование set() - это способ O (1) для обновления записей в массиве, что вы хотите для сортировки. –

8

Реализовать свой собственный компаратор:

Arrays.sort(yourArray, new Comparator<YourClass>() { 
     @Override 
     public int compare(YourClass o1, YourClass o2) { 
      //compare object properties 
     } 
}); 
+2

Вы имеете в виду «Коллекции», а не «Массивы», он имеет дело с «ArrayList» здесь? –

+0

ArrayList - это коллекция. –

+0

Arrays.sort предназначен для массивов, таких как 'Object []'. Чтобы отсортировать ArrayList, как указано в вопросе, вы должны использовать 'Collections.sort', как указано @Papa_Jay. – njzk2

0

Используется для Collections.sort() отсортировать ArrayList в Java 8:

Collections.sort(array, new Comparator<Class>() { 
    @Override 
    public int compare(Class o1, Class o2) { 
     //compare object properties 
    } 
}); 
Смежные вопросы