Как я могу отсортировать ArrayList? - PullRequest
2 голосов
/ 15 декабря 2011

У меня есть ArrayList нескольких экземпляров класса ElementClass.Внутри ElementClass находится метод с именем getCounter(), который возвращает значение переменной counter внутри этого класса.Эта переменная может иметь только 0, 1 или 2 в качестве значений.

Мне нужно отсортировать эти ArrayList записи в порядке возрастания в зависимости от значения, которое возвращает метод getCounter(),Как я могу это сделать?Я пытался исследовать несколько методов, но все те, которые я нашел, требуют установки значения.Например:

list[i + 1] = temp

Но ArrayList s не позволяют установить значение.Например:

ArrayList<ElementClass> temp = list.get(i);
list.get(i + 1) = temp;

Приведенный выше код не позволит мне скомпилировать из-за ошибок.ArrayList s позволяют добавлять элементы только в конце списка (с помощью метода .add(item)) и удалять элементы из определенного индекса (с помощью метода .remove(index).)

Как выполнитьсортировка с использованием только методов add() и remove()?Или есть другой способ сортировки ArrayLists в Java?

Ответы [ 3 ]

10 голосов
/ 15 декабря 2011
Collections.sort(list, new Comparator<ElementClass>() {
   public int compare(ElementClass a, ElementClass b){
      return a.getCounter()-b.getCounter();
   }
});
3 голосов
/ 15 декабря 2011
Collections.sort(list, new Comparator<ElementClass> {
    @Override
    public int compare(ElementClass o1, ElementClass o2) {
        if (o1.getCounter() == o2.getCounter()) {
            return 0;
        }
        return o1.getCounter() < o2.getCounter() ? -1 : 1;
    }
}

если getCounter использует класс-оболочку (например, Integer вместо int), вы можете сделать:

Collections.sort(list, new Comparator<ElementClass> {
    @Override
    public int compare(ElementClass o1, ElementClass o2) {
        return (o1.getCounter().compareTo(o2.getCounter());
    }
}
0 голосов
/ 15 декабря 2011
ArrayList<A> list = new ArrayList<A>();

        list.add(new A(5));
        list.add(new A(3));
        list.add(new A(1));
        list.add(new A(8));

        Comparator<A> comp = new Comparator<A>() {
           public int compare(A a, A b){
              return a.getField()-b.getField();
           }
        };

        Collections.sort(list, comp);
        for(A a:list){
            System.out.println("Field value : "+a.getField());
        }

ВЫВОД:

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