如何在java中使用枚举作为数组索引

puf*_*ffa 1 java arrays enums

我将12个值存储在一个数组中,每个值代表一个月的一段数据.我有一年中所有月份的枚举,并希望能够选择显示正确数据的月份,而不是使用数组索引.有没有办法做到这一点?谢谢

Bob*_*ous 9

我建议不要使用 enum 成员作为数组索引,因为 enum 成员的数字索引可能会发生变化(如果添加了新成员或者成员的顺序在 enum 类中发生了变化)。

相反,我会使用 aMap<Month, Data>以便每个枚举成员指向地图中的一个Data对象(或您需要使用的任何其他类型):

Map<Month, Data> monthMap = new HashMap<>();
monthMap.put(Month.MARCH, dataObject);
Data retrievedData = monthMap.get(Month.MARCH);
Run Code Online (Sandbox Code Playgroud)

更新:如果你Map使用一个枚举类型作为其键,然后它总是更有效地使用的EnumMap,而不是一个HashMapTreeMap等,所以上面的代码会更好出发是这样的:

Map<Month, Data> monthMap = new EnumMap<>(Month.class);
Run Code Online (Sandbox Code Playgroud)

在幕后,EnumMap实际上维护一个索引与枚举实例对齐的数组,正如 OP 希望手动实现的那样。


her*_*mit 6

如果你有一周的日子,如:

public enum Days {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
    THURSDAY, FRIDAY, SATURDAY 
}
Run Code Online (Sandbox Code Playgroud)

和数组如: String days[]=new String[7]

数组中的索引只能通过int.所以你可以使用enum作为索引:

days[Days.SUNDAY.ordinal()]="sunday";
System.out.println(days[Days.SUNDAY.ordinal()]);
Run Code Online (Sandbox Code Playgroud)

Output:sunday

Ordinal() 返回的位置 enumenum声明中常量.但它看起来并不那么优雅.