Вопрос по java, sorting – Как отсортировать массив объектов Java?

7

Поэтому я хочу, чтобы массив объектов в Java.

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

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

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

Благодарю.

Да, я буду реализовывать вставку сортировки ALG. user1253201
Твой профессор хочет, чтобы ты сам реализовал алгоритм сортировки? John Ericksen
@ user1253201: выясните, что вам нужно делать с объектами, и посмотрите на методы изList а такжеArrayList чтобы увидеть, какие инструменты предоставляются для этого. Большинство сортов полагаются наswap метод, который обычно представляет собой сочетаниеget, remove, а такжеadd методы. njzk2
то, что говорит @joncarl, - это хороший момент, если вам нужно взглянуть на пузырьковую сортировку (ее довольно легко реализовать, но не так быстро) krystan honour

Ваш Ответ

5   ответов
0

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

Я думаю, что вы хотите направить его в метод set вместо метода add. метод add, слайды элементов вместо их замены.
Если вы не смотрите на отсортированный массив и не добавляете новые элементы, использование add () будет иметь скрытые потери производительности, поскольку необходимо сместить все элементы с более высокими индексами. То же самое относится и к remove (). Использование set () - это O (1) способ обновить записи в массиве, что и нужно для сортировки.
@ColinD Не обязательно. Хотя вы можете заменить один элемент другим, вы также можете удалить элемент, а затем поместить его в новое положение, отчасти это зависит от алгоритма.
0

как в традиционном массиве, используйте ArrayList.set (int, E).

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html#set%28int,%20E%29

8

Arrays.sort(yourArray, new Comparator<YourClass>() {
        @Override
        public int compare(YourClass o1, YourClass o2) {
            //compare object properties
        }
});
Тем не менее, это, кажется, не по теме, так как ОП, по-видимому, должен реализовывать алгоритм сортировки
ArrayList - это коллекция.
Ты имеешь в видуCollections не Массивы, он имеет дело сArrayList Вот ?
Arrays.sort для массивов, какObject[], Чтобы отсортировать ArrayList, как указано в вопросе, вы должны использоватьCollections.sortкак указано @Papa_Jay.
4

implements Comparable

метод, который делает работу

public int compareTo(Object obj)
{
}

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

Полный примерздесь, в учебном пособии надеюсь это поможет

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

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

Collections.sort() отсортировать ArrayList в Java 8:

Collections.sort(array, new Comparator<Class>() {
    @Override
    public int compare(Class o1, Class o2) {
        //compare object properties
    }
});

Похожие вопросы