TreeMap как универсальный c класс - PullRequest
0 голосов
/ 02 февраля 2020

Я хочу выучить TreeMap из Java Коллекций и создать пример кода с использованием дженериков.

У меня была идея составить «упорядоченный список» любого типа, каким вы хотите его видеть (например,) где сотрудники располагаются в алфавитном порядке по имени, а Integer - их идентификаторы, или где студенты назначаются по их идентификатору, а Student - это пользовательский объект.

Мне нужна помощь или руководство, чтобы изучить эту коллекцию Java и решить эту проблему .

Мой универсальный c класс

public class GenericTreeMap<E1, E2> extends TreeMap<E1, E2>{
    private E1 e1;
    private E2 e2;

    public GenericTreeMap(E1 e1, E2 e2) {
        this.e1 = e1;
        this.e2 = e2;
    }

    public void printTypes() {
        System.out.println("Key type: " + e1.getClass().getName());
        System.out.println("Value type: " + e2.getClass().getName());
    }
}

Основной

Empleado e = new Empleado();
GenericTreeMap<Empleado, Integer> treeMap = new GenericTreeMap<>(e, "");
treeMap.put(new Empleado(1, 1500), "Ricardo");
treeMap.put(new Empleado(2, 1200), "Gerardo");
treeMap.put(new Empleado(3, 300), "Becario");
treeMap.put(new Empleado(4, 0), "Esclavo");

treeMap.values();

Ожидаемый результат

Тип ключа: сотрудник

Тип значения: целое число

Редактировать: мой код не работает должным образом.

1 Ответ

0 голосов
/ 02 февраля 2020

Использовать список, а не карту. Реализуйте Comparable в своем классе элементов, или Comparator , или используйте Comparator в сочетании с потоками. Карта - неправильный инструмент для реализации того, что вам нужно.

Конечно, есть возможность сохранять элементы упорядоченными в TreeMap . В зависимости от того, какой порядок вам необходим, вы можете реализовать Comparator и предоставить его при создании TreeMap . Но обработка может быть более сложной, чем использование List .

...