【问题标题】:Enum used as key in TreeMap not sorted after adding在 TreeMap 中用作键的枚举在添加后未排序
【发布时间】:2016-04-25 15:45:14
【问题描述】:

我正在使用 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
     }

成分类定义为

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";
    }
},

//等等

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

如果不是枚举,而是我要实现比较的类,我可以为枚举做类似的事情吗?

【问题讨论】:

  • 顺便说一句,枚举可以有字段和构造函数,并且可以实现接口——最好有一个成本字段和一个在类主体中声明的 getCost 方法。
  • 虽然没有比较器的TreeMap 使用枚举的自然顺序而不是任何属性的字典顺序是正确的,但我不明白你是如何注意到的。声明常量Ingredient { COFFEE, DECAF_COFFEE } 的自然顺序与'C' &lt; 'D' 的字典顺序完全匹配……

标签: java sorting enums hashmap treemap


【解决方案1】:

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

但是你可以pass自定义ComparatorTreeMap

【讨论】:

  • 我明白了,所以这意味着我定义枚举的顺序没有按排序顺序定义,这就是为什么遍历使用我定义的手动顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-26
  • 2018-06-23
  • 2014-02-16
  • 1970-01-01
  • 2010-12-26
  • 2014-07-12
相关资源
最近更新 更多