Подсчет сортировки в java для кортежей - PullRequest
3 голосов
/ 24 января 2010

Я строю класс, который имеет отображение строк на целые числа. Так что если бы у меня было 3 яблока, я бы сопоставил яблоки с 3 *. 1001 *

Мне нужно написать класс, который сортирует имена объектов по убыванию чисел.

Так что, если у меня есть

(яблоки, 3) (апельсины, 2) (бананы, 5)

Я получу (бананы, 5), (яблоки, 3), (апельсины 2)

Мне было интересно, есть ли класс, который бы облегчил мне жизнь или как я бы это реализовал.

Спасибо.

Ответы [ 3 ]

6 голосов
/ 24 января 2010

Вы должны иметь возможность поместить свои объекты (яблоки, 3) (апельсины, 2) (бананы, 5) в список и затем вызвать Collections.sort (ваш список). Затем вы захотите убедиться, что объявленный вами объект реализует интерфейс Comparable.

Более подробная информация доступна на http://java.sun.com/docs/books/tutorial/collections/interfaces/order.html

Допустим, вы объявили свой объект

public class FruitAndCount implements Comparable<FruitAndCount> {
    private final String name;
    private final Integer count;

    public FruitAndCount(String name, int count) {
        this.name = name;
        this.count = count;
    }

    public String name() { return name;  }
    public int count()   { return count; }

    public int compareTo(FruitAndCount o) {
        return this.count.compareTo(o.count);
    }
}

После этого вы сможете сделать следующий вызов, который отсортирует ваш список:

FruitAndCount fruitArray[] = {
    new FruitAndCount("Apples", 3),
    new FruitAndCount("Oranges", 2),
    new FruitAndCount("Bananas", 5)
};

List<FruitAndCount> fruit = Arrays.asList(fruitArray);
Collections.sort(fruit);

У вас должен быть отсортированный список фруктов.

4 голосов
/ 24 января 2010

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

В этом случае рекомендуется использовать перегруженный метод Collections.sort(), для сортировки которого требуется значение List<T>, а для определения того, как объекты должны быть Comparator<T> быть отсортированным. Это намного чище, чем создание новых кортежей из ваших старых кортежей, и может быть более гибким, чем реализация Comparable (что также является допустимым решением).

2 голосов
/ 24 января 2010

Вы действительно хотите взглянуть на TreeMap.

Предполагая, что счет уникален, вы просто переворачиваете кортежи, сохраняя счет в качестве ключа и название фрукта в качестве значения. Затем TreeMap сохраняет элементы, отсортированные в порядке возрастания по значению ключа, и вы можете прочитать значения обратно. Поскольку сортировка выполняется при вставке, время поиска очень мало.

Если у вас неуникальные счета, здесь есть простое решение , которое позволит вам воспользоваться TreeMap.

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