【问题标题】:Why do we need Set and Map for Java Enum为什么我们需要 Java Enum 的 Set 和 Map
【发布时间】:2014-12-31 13:58:47
【问题描述】:

我是 Enum 的新手。在学习 Enum 时,我遇到了 EnumSet 和 EnumMap。我知道在使用 EnumSet 和 EnumMap 处理 map 和 set 时,比这个问题中的散列对应物要好得多。

Why an EnumSet or an EnumMap is likely to be more performant than their hashed counterparts?

我的问题是

Java中的Enum在什么场景下需要Map和Set?

我对了解实际场景更感兴趣。

【问题讨论】:

  • 当你想要命名为“flag”时,你需要EnumSet(比使用ints 和bit-magic 的可读性要好得多)。当您想为枚举值分配值或默认值/函数时,您需要EnumMap
  • 你的问题不是很清楚。您是否想了解 EnumMap 和 EnumSet 优于 HashMap 和 HashSet 的场景,或者您是否在问何时应该使用 EnumMap 以及何时使用 EnumSet(假设是因为您混淆了它们)?
  • 我只是想知道,为什么或何时我们需要一个集合(Map 和 Set)用于枚举。对不起,如果我的问题令人困惑。
  • 由于 EnumMap 和 EnumSet 更好,所以你可以随时使用。
  • @mvg:您在编译时知道所有可能的枚举值,但不一定知道在运行时要使用它们的哪个组合。也许它们是从配置文件中读取的可能枚举值的子集,或者您正在处理一周中的某一天的子集。

标签: java enums enumset enum-map


【解决方案1】:

假设您为每个形状对象定义享元,例如:

public enum SHAPE {
    TRIANGLE, RECTANGLE, SQUARE, HEXAGON;
}

让我们假设每次为所有这些形状创建的对象都是巨大的。假设它进入数据库并在构造函数中获取一些数据。你是做什么的?

您使用枚举键和值作为一次性对象将其保存在地图中,然后使用枚举,您说尝试调用类似的内容:

public double calculateArea(SHAPE shape) {
    Figure figure = map.get(shape);//you dont create object but take it from a map
    return figure.calculate();
}

对于 EnumSet,假设您有基本颜色的枚举,例如:

enum COLORS {
    RED, BLUE, GREEN
}

现在,如果我想创建说黄色并希望知道相同的成分,我可以使用 EnumSet 和两种颜色,如绿色和红色。同样,我可以根据我的颜色要求存储多个具有变化的集合。

这只是为了举例,但您甚至可以添加计数,以便更复杂地说明您需要多少红色、蓝色、绿色像素变化。

【讨论】:

  • 谢谢。很高兴它有帮助。
  • 我了解 Enum 是一个常量集合,而您说 EnumSet 是该集合的一部分 - 一个子集合。对吗?
  • 是的,它扩展了AbstractSet
猜你喜欢
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 2020-09-05
  • 2012-12-03
  • 2016-06-25
  • 2017-03-12
相关资源
最近更新 更多