当前位置: 首页 > 知识库问答 >
问题:

我可以迭代通过的一组常量

符懿轩
2023-03-14

我经常遇到这样的情况:我需要定义一组常量,我需要循环遍历它们。比如卡片套装,我需要向用户显示可用套装的列表。

我看到的两个选项是枚举或静态int。但问题是,当我需要遍历列表时,我最终使用了带有values()和Ordinal()的枚举。许多人说使用这些是不好的,您应该回到静态int。

你们是如何在需要迭代的地方编写一组常量的呢?最好的做法是什么?

谢谢

共有1个答案

微生新翰
2023-03-14

可以使用values()方法。事实上,Java的枚举教程明确提到了这一点:

编译器在创建枚举时会自动添加一些特殊方法。例如,它们有一个静态values方法,该方法返回一个数组,该数组包含枚举的所有值,这些值按其声明的顺序排列。此方法通常与for-each构造结合使用,以迭代枚举类型的值。例如,下面的Planet类示例中的代码会迭代太阳系中的所有行星。

for (Planet p : Planet.values()) {
    System.out.printf("Your weight on %s is %f%n",
                  p, p.surfaceWeight(mass));
}

常量int相比,枚举提供了一些优势,例如更强的类型检查。但是如果您绝对需要进行代码调优,并且确信您没有过早地优化,那么您可以使用常量int和包含它们的数组。免责声明:我不建议这样做为通常的做法。请不要默认这样做。

private static final int SUIT_SPADES = 1;
private static final int SUIT_CLUBS = 2;
private static final int SUIT_HEARTS = 4;
private static final int SUIT_DIAMONDS = 8;

private static final int[] SUITS = new int[] { 
   SUIT_SPADES, SUIT_CLUBS, SUIT_HEARTS, SUIT_DIAMONDS };

...
for ( int suit : SUITS ) { ... }
 类似资料:
  • 问题内容: 我想知道是否有一种更快,更省时的方法来遍历元组列表,找到合适的匹配项。我要做的是: 根据列表中项目的数量,此代码可能需要花费一些时间才能执行。我敢肯定有更好的方法可以做到这一点。 问题答案: 假设更多的内存使用不是问题,并且如果元组的第一项是可哈希的,则可以从元组列表中创建字典,然后查找值就像从中查找键一样简单。就像是: 编辑 :要创建一个反向映射,请使用类似:

  • 代码: https://play.rust-lang.org/?version=stable 返回此错误: 错误[E0277]:类型为

  • 我想在HashMap中搜索重复项。目前这是我的HashMap:

  • 我在C:drive(本地计算机)中有一个名为abc.xls的excel文件,现在在第一张表本身的excel文件中有一个如下所示的表,这个下面的表可以位于表中的任何范围内,所以我开发了下面的java程序,它将首先按行扫描整个表,然后按列扫描,并将找到TradeRef所在的单元格 下面的程序中的问题是,它捕获TradeRef所在的单元格,然后迭代列,然后以类似的方式捕获下一行并迭代列 但我要应用的逻辑

  • 问题内容: 我很好奇如何快速进行元组的for循环。 我知道要访问每个成员,您可以使用带点号的索引号 //错误:类型不符合协议顺序 问题答案: 是的你可以! 瞧! 注意最后一个是不是一个元组这样什么也不会发生(尽管它是一个内容可以被访问1元组或“单” ,为0)。 有趣的是,它甚至可以迭代其他类型的集合。 并且该集合包括和! 注意:作为块的第二个参数传递的值是type 。您必须将其强制转换回原始类型的

  • 问题内容: 如果我有一个包含的列表,并且想编写一个迭代器,以便对以’a’开头的元素进行迭代,那么我可以编写自己的迭代器吗?我怎样才能做到这一点 ? 问题答案: 当然。迭代器只是接口的实现。如果您使用中的现有可迭代对象(例如),则需要对其进行子类化并覆盖其功能,以便返回自己的对象,或者提供一种在特殊实例中包装标准迭代器的方法(具有被更广泛使用的优势)等。