当前位置: 首页 > 面试题库 >

使用Enum的序数值对Java中的数组进行索引是否是不好的做法?

邹修真
2023-03-14
问题内容

我有两个数组:墙和邻居。

public boolean[] walls = new boolean[4];
public Cell[] neighbors = new Cell[4];

我有一个枚举:

enum Dir
{
    North,
    South,
    East,
    West
}

现在,我希望能够按其方向访问墙壁或邻居,因此不必绕过一堆魔术索引。

但是,当我阅读Enum.ordinal()的文档时,它说程序员几乎不会使用此方法,这使我认为不应以这种方式使用它。

我正在考虑做类似的事情:

    List<Dir> availableDirections = new ArrayList<Dir>();
    for(Dir direction : Dir.values())
        if (!Neighbors[direction.ordinal()].Visited)
            availableDirections.add(direction);

甚至:

return Neighbors[Dir.North.ordinal()];

我应该恢复对索引值设置为NORTH,SOUTH,EAST,WEST的静态常量还是使用Enum的序数方法


问题答案:

在切线问题上,对邻居使用EnumMap可能更好:

Map<Dir, Cell> neighbours = 
    Collections.synchronizedMap(new EnumMap<Dir, Cell>(Dir.class));

neighbours.put(Dir.North, new Cell());

for (Map.Entry<Dir, Cell> neighbour : neighbours.entrySet()) {
    if (neighbour.isVisited()) { ... }
}

etc..

顺便说一句:按惯例,枚举实例应全部为大写,

enum Dir {
    NORTH,
    EAST, 
    SOUTH,
    WEST
}


 类似资料:
  • 我有一个枚举: 在枚举成员之间使用方法检查“层次结构”有什么问题吗?我的意思是-当有人将来可能会意外更改顺序时,使用它排除冗长是否有任何缺点。 还是这样做更好:

  • 问题内容: 我正在慢慢尝试理解numpy中s和s之间的区别,以及可变与不可变类型之间的区别。 如果我使用“高级索引”访问数组的一部分,则应该返回一个副本。这似乎是真的: 由于仅是副本,因此它不会共享数据,更改它也不会突变。但是,这让我感到困惑: 因此,看来,即使我使用高级索引,分配也仍然会将左侧的内容视为视图。显然,第2行与第6行是相同的对象/数据,因为变异对其没有影响。 所以我的问题是:第8行中

  • 问题内容: 如果排序列上有索引,排序是否使用mysql索引?索引还用于其他什么用途? 它对列的组合索引和单独索引有什么区别? 问题答案: 是的,当按排序列排序时,MySQL使用索引对信息进行排序。 另外,如果在添加到 SELECT 子句的所有列中都有索引,则MySQL不会从表本身加载数据,而是从索引加载数据(更快)。 合并和单独的索引之间的区别是,MySQL不能使用超过 一个 每次查询索引,因此,

  • 我的标题可能有点不恰当,但我真的不知道如何表述这个问题。 基本上,我有一个包含三列的数据库,其中包含文本字段。 我想从一列中提取所有值,并将它们分组为一个巨大的字符串,同时用\n分隔它们。 最后三个字符串应存储在单个字符串数组中。因此,我决定用三个列名查询数据库,并在整个表中循环: 我以前使用过类似的方法来连接所有三个字符串,但现在我需要在这三个值之间进行某种分隔。 检索完这些值后,我想将它们分别

  • 问题内容: 我正在开发一个网页,在那里我为类似国际象棋的游戏布置一块面板,以及几个棋盘托盘。所有操作都使用HTML(使用jQuery在游戏进行时进行动态更新)完成。在某个地方,我想到在页面中使用元素的绝对定位被认为是不好的做法,并且最好使用相对定位。 经过相对定位的困扰了很长时间之后,我意识到板元件的绝对定位要容易得多,而且要正确得多。 有谁知道相对定位优于绝对定位的原因吗?在决定采用哪种方法时,

  • 问题内容: 在网上看到有关Java编程练习的解释时,我遇到了以下代码: 我了解代码的功能,但是我不知道它如何使用char索引(即count [c],其中c是char)访问数组元素。我以为索引只能是整数? 问题答案: 字符(16位)是整数(32位),反之亦然。这是一个隐式转换,特别是char到unsigned int。在这种情况下,索引可能是代表此字符的ASCII码(对于ASCII字符)。