如何在Java中使用数组下标的枚举
如何对数组下标使用枚举如何在Java中使用数组下标的枚举,java,arrays,enums,Java,Arrays,Enums,如何对数组下标使用枚举 enum {VALUE_ONE, ... , SIZE}; int[] x = new int[SIZE]; 枚举不是数字。但是您可以执行SIZE.ordinal()以下是代码。不过,这看起来不像是好的做法 int[] x = new int[EnumClass.values().length]; 然后,您可以通过ordinal() 看起来还是不太好 考虑使用Map类似EnumMap。为什么是原子整数?因为它可以修改它的值,而不是一直分配一个新实例(以可能不必要的同步
enum {VALUE_ONE, ... , SIZE};
int[] x = new int[SIZE];
枚举不是数字。但是您可以执行SIZE.ordinal()以下是代码。不过,这看起来不像是好的做法
int[] x = new int[EnumClass.values().length];
然后,您可以通过ordinal()
看起来还是不太好
考虑使用Map
类似EnumMap
。为什么是原子整数?因为它可以修改它的值,而不是一直分配一个新实例(以可能不必要的同步为代价)。但这是另一个问题。对于下面的枚举
enum test{VALUE_ONE, ... , SIZE};
使用像这样的尺寸
int[] x = new int[test.SIZE.ordinal()];
您可以使用:
int[]x=newint[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()];
使用一个-它仅用于此情况
enum Value {
VALUE_ONE, ... , VALUE_LAKH
}
Map<Value, Integer> x = new EnumMap<>();
x.put(Value.VALUE_ONE, 13);
枚举值{
价值1,…,价值10万
}
Map x=新的EnumMap();
x、 put(Value.Value_-ONE,13);
在内部使用数组(Integer[]
)。唯一的缺点是使用Integer
而不是int
。假设Java9或Java10将引入基本的泛型类型(List
等等)
顺便说一句,EnumSet
也存在,并且与BitSet
一样有效。请进一步解释您的问题。每个枚举都有一个静态方法values()
来获取它的所有值。并使用ordinal()
来获取它在枚举中的位置。我想使用一组名为枚举的常量值来迭代数组。当我尝试System.out.println(x[a.VALUE_ONE.getValue()]);我得到了BoundIndexException的arrayOutOfBoundIndexExceptionVALUE\uOne(0),
VALUE\uTwo(1),
我使用了这些,但当SIZE(2)
int[]x=new int[A.SIZE.getValue()]打印时,它们都得到了0代码>int var1=x[A.VALUE_ONE.getValue()];//var1==0
int var2=x[A.VALUE_TWO.getValue()];//var2==0
你的意思是?我设置了var=x[A.VALUE\u ONE.getValue()]
然后打印var
。这次我将var
设置为相同的值,但是VALUE\u TWO
它们都打印了0是否填充了数组x?默认情况下,数组填充为零。您的数组表示为[0,0]
我不知道您不想实现什么<代码>地图
?您已经为枚举设计了EnumMap
。对于任何数据结构,我都不会依赖于enum的序数值,因为它完全取决于定义顺序。假设保存数组,修改枚举,然后尝试读取数组。这将是一个问题。
enum Value {
VALUE_ONE, ... , VALUE_LAKH
}
Map<Value, Integer> x = new EnumMap<>();
x.put(Value.VALUE_ONE, 13);