Java 添加后未排序用作树映射中键的枚举

Java 添加后未排序用作树映射中键的枚举,java,sorting,enums,hashmap,treemap,Java,Sorting,Enums,Hashmap,Treemap,我使用的是一个树映射,其中键是一个枚举,值是一个整数 TreeMap<Ingredient, Integer> inv; public Inventory(){ inv = new TreeMap<Ingredient, Integer>(); inv.put(Ingredient.COFFEE, 10); inv.put(Ingredient.DECAF_COFFEE, 10); /

我使用的是一个树映射,其中键是一个枚举,值是一个整数

     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
     }
//等等

但是,当我在添加所有成分后迭代树映射时,枚举键不会按字典顺序打印

如果不是enum,而是一个我将实现compareto的类,那么我可以为enum执行类似的操作吗?

已经实现了。它使用枚举常量的定义顺序,但遗憾的是,您无法覆盖
compareTo
-方法来实现字典顺序,因为它被定义为
final

但是您可以自定义已实现的
树映射。它使用枚举常量的定义顺序,但遗憾的是,您无法覆盖
compareTo
-方法来实现字典顺序,因为它被定义为
final


但是您可以自定义
树映射,这意味着我定义枚举的顺序没有按排序顺序定义,这就是为什么遍历使用我定义的手动顺序。我知道,这意味着我定义枚举的顺序没有按排序顺序定义,这就是为什么遍历使用我定义的手动顺序。顺便说一句,枚举可以有字段和构造函数,也可以实现接口-最好在类的主体中声明一个cost字段和一个getCost方法。虽然没有比较器的
TreeMap
使用枚举的自然顺序而不是任何属性的字典顺序是正确的,我不明白你是怎么注意到的。声明常量
成分{COFFEE,DECAF_COFFEE}
的自然顺序与
'C'相关顺便说一句的词典顺序完全匹配,枚举可以有字段和构造函数,也可以实现接口-最好在类的主体中声明一个cost字段和一个getCost方法。虽然没有比较器的
TreeMap
使用枚举的自然顺序而不是任何属性的字典顺序是正确的,我不明白你是怎么注意到的。声明常量
成分{COFFEE,DECAF_COFFEE}
的自然顺序与
'C'的词典顺序完全匹配
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";
    }
},