24

在什么情况下,枚举比保证唯一元素的 Collection 更合适(我猜是 java.util.Set 的实现者......)?

(这是我之前问题的一种跟进)

4

6 回答 6

27

基本上,当它是一组在编译时已知的定义明确的固定值时。

您可以非常轻松地将枚举用作集合(使用EnumSet),它允许您定义行为、按名称引用元素、打开它们等。

于 2009-01-26T19:47:45.933 回答
5

当元素预先知道并且不会改变时,枚举是合适的。

如果元素可以在运行时更改,请使用 Set。

于 2009-01-26T19:48:33.530 回答
3

我不是java专家,但我的猜测是当你想保证某个值池时使用枚举,当你想保证唯一性时使用集合。示例是枚举一周中的几天(不能有“funday”)并收集 SSN(我知道的通用示例!)

于 2009-01-26T19:48:28.117 回答
2

很好的回应——我会试着总结一下,如果只是为了我自己的参考——看起来你应该在两种情况下使用枚举:

您需要的所有值在编译时都是已知的,以及以下一项或两项:

  • 您想要比通常的集合实现更好的性能
  • 您希望将潜在值限制为编译时指定的值

通过 Jon 提供的 Collection over enumeration 链接,您可以将枚举性能和安全性作为实现细节获得好处,而无需将其合并到您的整体设计中。

社区维基,如果您愿意,请进行编辑和改进!

于 2009-01-26T20:03:08.350 回答
2

注意:您可以同时使用 EnumSet。

于 2009-01-26T22:06:50.083 回答
0

在某些情况下,您的业务需要创建新项目,但同时需要基于一些固定项目的业务逻辑。对于你想要一个枚举的固定的,新的显然需要某种集合/数据库。

我已经看到项目使用此类项目的集合,从而导致业务逻辑取决于用户可以删除的数据。永远不要这样做,而是根据需要为固定的枚举创建一个单独的枚举,并为其他枚举创建一个集合。

另一种解决方案是使用具有不可变对象的集合来获取固定值。这些项目也可以驻留在数据库中,但有一个额外的标志,因此用户无法更新/删除它。

于 2009-01-26T21:23:46.877 回答