【问题标题】:Confusion about collections, enumeration, and iterator in Java关于 Java 中的集合、枚举和迭代器的困惑
【发布时间】:2014-01-09 13:17:39
【问题描述】:

我的教科书几乎没有谈到 Java 中的枚举,而我看过的视频也没有太多解释。所以据我了解,枚举就像一个完全不同的类 你可以在哪里存储常量。有人可以向我扩展关于常量的信息吗? 给我看更好的例子?就像我在看到示例后了解常量是什么 例如颜色、方向,在之前的视频中是人,而在枚举中 我在学年的一个项目的版本,它是命令词。但我不是 100% 了解概念或如何使用。

  1. 另外,当您可以创建一个集合时,枚举的意义何在?像 例如,我看到的最后一个视频,视频制作者以以下格式对人进行了枚举 name(String description, int age),这就是他定义他的构造函数的方式,他有 获取和设置方法。这样做的好处是什么,而不是仅仅创造一个人 以相同的方式创建对象,他们创建一个集合并将人员对象存储在 那里?

  2. 我去上面查了一下,看到这个帖子后: Difference between Java Enumeration and Iterator 迭代器可以让我循环遍历一个集合,而一直以来我 认为枚举就像一个不同的类。但在线程中,他们是 比较它们。枚举就像一个迭代器,但没有删除 方法。这个枚举与我上面所说的不同吗?

【问题讨论】:

  • 去阅读IteratorEnumeration的javadoc。
  • 您对enumEnumeration 感到困惑。 enum 是一种特殊类型的单例类,而 Enumeration 是已弃用的 Iterator 模式。忘记Enumeration
  • 只要你有public static int SOMETHING=0; public static int SOMETHINGELSE=1; 等,然后使用SOMETHING0 完全分开,它就会被存储起来,因为你可以将其形式化为枚举
  • @Abdul 不,Enumerationenum 无关。正如鲍里斯所说,忘记Enumeration,因为Iterator 基本上已经取代了它。至于enumCollections,enum 更适合用于静态、常量数据,而Collection 更适合用于动态生成和/或变化的数据。
  • @Abdul 或多或少。正如鲍里斯的回答基本上所说,enum 对于枚举常量很有用。它对于包含 set 的不同但相关的常量 enumerated 很有用。因此,基本指南针方向(北、南、东、西)的enum 将是一个很好的用例。范围(通用或其他)将取决于您的应用程序设计。我觉得我的解释可能有点欠缺。有意义吗?

标签: java collections enums iterator enumeration


【解决方案1】:

你对几个不同的类感到困惑。

  1. enum
  2. Enumeration
  3. Iterator

enum 是一个枚举常量,即可以采用多个已定义值的常量,例如

public enum Gender {
    MALE,
    FEMALE;
}

它旨在提供类型安全。

EnumerationCollections API 的一个现已弃用的部分 - 忘记这一点。它已被Iterator 取代。

Iterator 是四人帮所描述的迭代器模式的实现。

为什么要使用Iterator 而不是Collection 也许我的回答here 会有所帮助。

至于人名格式的枚举(String description, int age),这就是他定义他的构造函数的方式,他有get和set方法。这是一个很大的禁忌。

enum 应该是一个常量,所以不应该有 setter 方法。 enum 是一组定义的值,就像我上面的例子一样。

如果您想要people 中的Collection,那么Collection<Person> 中的Person 类将是正确的解决方案。

所以,总而言之。将enum 用于常量值;使用Collection 来收集东西。并且不要使用Enumeration - 根本忘记它的存在。

【讨论】:

  • 我认为要解决的最后一点是 enumCollection 的用例之间的混淆。
  • 当您说类型安全时,是因为您不必在枚举中定义常量的类型是否正确?
  • @Abdul 如果我有一个方法setGender(final int gender) 我可以传入任何有效的int - 比如2,000。这意味着由程序来检查有效性。如果我有一个方法setGender(final Gender gender),我可以传入Gender.MALEGender.FEMALE - 我已经将Gender 变成了它自己的type。这是类型安全。
  • 哦,我明白了。您正在制作自己的数据类型。谢谢。
  • @Abdul 如果回答了您的问题,请接受答案。谢谢。
猜你喜欢
  • 2011-07-31
  • 1970-01-01
  • 2017-03-31
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 2012-06-08
相关资源
最近更新 更多