Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中使用数组下标的枚举_Java_Arrays_Enums - Fatal编程技术网

如何在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的arrayOutOfBoundIndexException
VALUE\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);