您好我想创建一个数组,其中每个位置都由枚举值表示。
例如:
public enum type{
green,blue,black,gray;
}
现在我想创建一个阵列,其中每个位置都是绿色,蓝色......
我会更清楚。我想创建一个数组,其中的位置由enum class.instead int []数组表示。[=] int [] [10]创建int [] array = new int [type.value]
答案 0 :(得分:6)
它是type[] allValues = type.values()
。请参阅this question。
或者,您可以使用EnumSet
:
EnumSet<type> types = EnumSet.allOf(type.class);
为您提供高性能Set
实现,其中包含您的枚举值。
PS:您应该以大字母(CamelCase)开头命名枚举类。
修改强>
似乎你想要你的emum值的ordinal位置数组(为什么现在有人会使用数组而不是正确的数据集?):
type[] colors = type.values();
List<Integer> list = new ArrayList<Integer>(colors.length);
for (type color : colors) {
list.add(color.ordinal());
}
Integer[] array = list.toArray(new Integer[0]);
EDIT2:也许您希望Map<Integer, type>
使用密钥和值0 => green, 1 => blue, 2 => black, 3=> gray
(问题仍然不明确)?
答案 1 :(得分:2)
如果我错了,请先纠正我:你试图将每种颜色与int
值相关联。
如果是这样,你要找的是associative array,它在Java中被建模为Map
。因此,您可以使用一些Map<type, Integer>
来达到您想要的效果(最好是使用EnumMap
密钥优化的Enum
。
// I renamed your "type" to Color
Map<Color, Integer> map = new EnumMap<Color, Integer>(Color.class);
map.put(Color.BLUE, 3);
但是,如果你真的想要使用数组,你可以使用枚举常量的ordinal()
方法(它返回一个int
表示枚举声明中常量的位置,从0):
int[] ints = new int[Color.values().length];
ints[Color.BLUE.ordinal()] = 3;
如果这种关联对于整个应用程序来说是唯一的(如果你不需要同时将一个颜色与一个以上的值相关联;换句话说,如果从来没有某个客户端存储{{1和其他一些商店BLUE --> 2
),那么最好将该值存储在枚举本身中:
BLUE --> 3
然后你可以写:
enum Color {
GREEN, BLUE, BLACK, GRAY;
private int value;
// ...getter and setter for value...
}
阅读价值观:
Color.BLUE.setValue(8);
答案 2 :(得分:0)
这应该有效:
MyColor[] myList;
然后
myList = new MyColor[20];
nb,我不会使用type
作为枚举的名称,因为它没有好的含义。像颜色这样的东西更好。
答案 3 :(得分:0)
您想要一组type
个对象吗?您可以致电type[] types = type.values()
答案 4 :(得分:0)
枚举是java.lang.Enum的扩展,因此您可以使用java.lang.Enum的方法将枚举用作数组的维度。
枚举。 values()。length 呈现枚举的大小;
enumValue 。 ordinal()在枚举中呈现值的索引。
例如:
public class thisClass {
enum thisEnum = {valA, valB, valC, valD, valE }
private int[] arrayForThisEnum;
public thisClass() {
this.arrayForThisEnum = new int[thisEnum.values().length];
// further initialization
}
public void addOne(thisEnum xxx) {
this.arrayForThisEnum[xxx.ordinal()]++;
}
}