Java - Как я могу наиболее эффективно сортировать массив объектов SomeClass по полю String в этих объектах? - PullRequest
2 голосов
/ 24 февраля 2012

У меня есть класс с полем String с именем name. У меня есть массив типа SomeClass[], и я хочу перебирать эти SomeClass объекты в строковом порядке по их именам.

Мне любопытно, какой самый эффективный способ сделать это. Должен ли я использовать какой-то компаратор? Было бы хорошей идеей поместить их все в TreeMap и затем повторить это или что-то подобное? Я уверен, что смог бы найти решение, но я также уверен, что оно будет менее чем эффективным.

Любая помощь приветствуется.

Ответы [ 4 ]

4 голосов
/ 24 февраля 2012

Вы можете просто Arrays.sort свой Comparable класс, например Arrays.sort(a) (см. Код)

Или, если вы хотите использовать коллекцию Framework

Arrays.asList(...) и Collections.sort(..) является ключом.


ЕСЛИ SomeClass похож на это

public class SomeClass implements Comparable<SomeClass>{

    public String val;

    @Override
    public int compareTo(SomeClass that) {
        return this.val.compareTo(that.val);
    }

    @Override
    public String toString() {
        return this.val;
    }
}

Вы можете сортировать вот так

    SomeClass o = new SomeClass();
    o.val = "z";
    SomeClass t = new SomeClass();
    t.val = "a";
    SomeClass th = new SomeClass();
    th.val = "m";
    SomeClass[] a = new SomeClass[]{o, t, th};

    //this
    Arrays.sort(a);

    //or this
    List<SomeClass> l = Arrays.asList(a);
    System.out.println(l);
    Collections.sort(l);
    System.out.println(l);
3 голосов
/ 24 февраля 2012

Поместите ваши классы в Arraylist и используйте его sort метод.Неподтвержденный код:

yourArray.sort(new YourNameComparator());

class YourNameComparator implements Comparator<YourNameClass> {
    int compare(YourNameClass y1, YourNameClass y2) {
        return y1.getName().compareTo(y2.getName());
    }
}
1 голос
/ 24 февраля 2012

Ваши два варианта: сделать ваш класс реализуемым сравнимым и написать метод CompareTo или создать компаратор и передать его в Collections.sort (список списка, Comparator c)хотите использовать сопоставимый, поскольку StringY.compareTo (String x) уже существует.

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

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html

1 голос
/ 24 февраля 2012

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

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