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
,