如何在Java中使用枚举作为数组下标

时间:2014-10-14 08:12:27

标签: java arrays enums

如何使用enum作为数组下标?

enum {VALUE_ONE, ... , SIZE};
int[] x = new int[SIZE];

5 个答案:

答案 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()];