2013-03-15 2 views
2

У меня есть класс PriorityList с подписями Сопоставимый как аргумент в Java

Tree<Key extends Comparable<Key>, Value>
(который указан, я не могу изменить). Элементы Tree вставляются в некотором порядке, учитывая ключ (то есть он рассматривает метод ключа compareTo).

Предположим, у меня есть Tree<Integer, Integer>. Значение по умолчанию compareTo integer учитывает возрастающий порядок. Я хотел бы иметь возможность как-то добавить Tree вставить элементы в порядке убывания, если захочу. Я знаю, что мог бы написать еще один класс MyInteger, который реализует Comparable и имеет compareTo сам по себе.

Но есть ли другой способ? Мне бы очень хотелось, чтобы я мог как-то сообщить Tree, как заказать значения.

Второй вопрос: если бы я смог изменить Tree, как передать один компаратор в качестве аргумента? (учитывая общие типы-синтаксис).

+0

Вы можете умножить 'Integer'' '' '' '' – Barranka

+1

Невозможно ответить без какого-либо кода или документации вашего класса 'Tree'. – jlordo

ответ

2

Вы назвали два способа сделать это: пройдите в компараторе или сравните ключ. Если класс не позволяет вам проходить в вашем собственном компараторе, вы застреваете обезьяну с помощью клавиш или создаете свой собственный подкласс с помощью интерфейса Comparable.

Альтернативный код будет выглядеть примерно так.

public class Tree<K,V>{ 
    public Tree(Comparator<K> cmp) {...} 

} 
0

Вам не нужно будет создавать новый класс для обратного хода. вы можете использовать Collections.reverseOrder(), чтобы получить Comparator в обратном порядке.

Что касается второго вопроса, вы просто добавите сеттер к своему дереву. Что-то вроде: setComparator(Comparator<Key> c), а затем используйте этот компаратор для всех сравнений, необходимых в вашем Tree.

Смежные вопросы