如何使用enum作为数组下标?
enum {VALUE_ONE, ... , SIZE};
int[] x = new int[SIZE];
答案 0 :(得分:2)
这是代码。不过,这看起来不是一个好习惯。
int[] x = new int[EnumClass.values().length];
然后,您可以按ordinal()
int val = x[enumVar.ordinal()];
看起来仍然不是很好的做法。
考虑使用Map<EnumClass, AtomicInteger>
之类的EnumMap<EnumClass, AtomicInteger>
。为什么原子整数?因为它可以修改它的值而不是一直分配一个新的实例(以可能不必要的同步为代价)。但这是一个不同的问题。
答案 1 :(得分:1)
使用EnumMap - 仅适用于此情况。
enum Value {
VALUE_ONE, ... , VALUE_LAKH
}
Map<Value, Integer> x = new EnumMap<>();
x.put(Value.VALUE_ONE, 13);
内部使用数组(Integer[]
)。唯一的缺点是使用Integer
而不是int
。并假设java 9或10将引入原始泛型类型(List<int>
等)。
BTW EnumSet
也存在,效率与BitSet
一样。
答案 2 :(得分:0)
Enum不是数字。但你可以做SIZE.ordinal()
答案 3 :(得分:0)
以下枚举
enum test{VALUE_ONE, ... , SIZE};
像这样使用SIZE
int[] x = new int[test.SIZE.ordinal()];
答案 4 :(得分:0)
您可以使用:int[] x = new int[SIZE.ordinal()]; int var = x[SOME_VALUE.ordinal()];
它在枚举声明中的位置,其中初始常量的序数为零。
或为每个枚举元素设置特殊编号。像:
enum A {
VALUE_ONE(0),
SIZE(1),
;
int value;
private A( int value) {
this.value = value;
}
public int getValue() {
return this.value;
}
}
int[] x = new int[A.SIZE.getValue()];
int var = x[A.VALUE_ONE.getValue()];