Enum, используемый в качестве ключа в TreeMap, не сортируется после добавления

Я использую TreeMap, где ключ является перечислением, а значение является целым числом.

     TreeMap<Ingredient, Integer> inv;

     public Inventory(){
        inv = new  TreeMap<Ingredient, Integer>();
        inv.put(Ingredient.COFFEE, 10);
        inv.put(Ingredient.DECAF_COFFEE, 10);
        // and so on
     }

Класс Ingredient определяется как

public enum Ingredient {

COFFEE {
    public double getCost() {
        return 0.75;
    }

    @Override
    public String toString() {
        return "Coffee";
    }
},
DECAF_COFFEE {
    public double getCost() {
        return 0.75;
    }

    @Override
    public String toString() {
        return "Decaf Coffee";
    }
},

// и так далее

Однако, когда я повторяю древовидную карту после добавления всех ингредиентов, ключи перечисления не печатаются в лексикографическом порядке.

Если бы вместо enum это был класс, я бы реализовал сравнение, могу ли я сделать что-то подобное для enum?

1 ответ

Enum уже реализует Comparable. Он использует порядок, в котором определены константы перечисления, но, к сожалению, вы не можете переопределить compareTo-метод для достижения лексикографического упорядочения, потому что он определяется как final,

Но вы можете передать собственный компаратор в TreeMap,

Другие вопросы по тегам