首页 > 解决方案 > TreeMap 作为一个泛型类

问题描述

我想从 Java Collections 学习 TreeMap 并使用泛型制作示例代码。

我的想法是制作您想要的任何类型的“有序列表”,(例如)员工按名称按字母顺序排序,整数是他们的 ID,或者学生按他们的 ID 排序,学生是自定义对象。

我需要一些帮助或指导来学习这个 Java 集合并解决这个问题。

我的通用类

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();

预期产出

密钥类型:员工

值类型:整数

编辑:我的代码没有按预期工作。

标签: javagenericstreemap

解决方案


使用列表,而不是地图。在您的元素类中实现Comparable,或实现Comparator,或将Comparator与流结合使用。地图是实现您需要的错误工具。

当然可以在TreeMap中保持元素的顺序。根据您需要的顺序,您可以实现Comparator并在创建TreeMap时提供它。但是处理它可能比使用List更复杂。


推荐阅读