创建一个数组,其中每个位置都是枚举类型

时间:2011-12-11 22:38:01

标签: java arrays enums

您好我想创建一个数组,其中每个位置都由枚举值表示。

例如:

public enum type{

  green,blue,black,gray;

}

现在我想创建一个阵列,其中每个位置都是绿色,蓝色......

我会更清楚。我想创建一个数组,其中的位置由enum class.instead int []数组表示。[=] int [] [10]创建int [] array = new int [type.value]

5 个答案:

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