是否有枚举作为索引的数组的替换?

时间:2014-04-23 08:45:16

标签: java c enums

我曾经使用枚举作为C中的索引。(每个枚举类似于int值的别名) 例如:

typedef enum {DOG, CAT, MOUSE} ANIMALS;
int[3] age;
...
age[DOG] = 4;
age[CAT] = 3;
age[MOUSE] = 10;

以枚举作为索引,我始终可以确定我正在更新正确的单元格。此外,我也需要简单的数组。

我想在Java中做同样的事情。但是,我似乎无法找到一个简单的替代品。 有没有人知道可以像使用Array + enum combo在C中那样使用的替换?

4 个答案:

答案 0 :(得分:6)

是的,有一个相当简单的。使用HashMaps

Map<CustomEnum, Object> hashMap = new HashMap<>();

//Basic usage
hashMap.put(CustomEnumID, ObjectValue);
ObjectValue obj = hashMap.get(CustumEnumID); //Returns the value from the above line
hashMap.containsValue(CustomEnumID); //Return true or false

答案 1 :(得分:1)

Enum 几乎是Java中的对象。所以基本上你去 HashMap 你想在你的代码中引入对象 - 对象关系。

答案 2 :(得分:1)

正如在其他答案中已经说过的那样,使用Map<YourEnum, V>是做你想做的事情的好方法。但是,Java实际上有一个EnumMap(它实现了常规Map接口),它专门设计用于枚举类型键,并且如文档中所述,它可能更快而不是使用HashMap

答案 3 :(得分:0)

在我看来,有两种解决方案:

1)您可以模拟&#39; C枚举类型&#39;在Java中的类:

class Animals {
    public static int DOG = 0;
    public static int CAT = 1;
    public static int MOUSE = 2;
}

在这种情况下,您手动将值设置为枚举 - 在C中它由编译器自动完成。

枚举的用法如下所示

public class Test {
  public static void main(String[] args) {

    int[] age = new int[3];

    age[Animals.DOG] = 4;
    age[Animals.CAT] = 3;
    age[Animals.MOUSE] = 10;

    for (int i = 0; i < age.length; i++) {
        System.out.print(age[i] + " ");
    }
  }
}

我认为这是一个糟糕的解决方案,因为这打破了封装的OOP原则(在动物类中)。

2)您可以使用Java enum

enum Animals {
    DOG(0), CAT(1), MOUSE(2);
    int value;

    private Animals(int value) {
        this.value = value;
    }

    public int getValue() {
        return this.value;
    }
}

使用示例

public class Test {
    public static void main(String[] args) {

        int[] age = new int[3];

        age[Animals.DOG.getValue()] = 4;
        age[Animals.CAT.getValue()] = 3;
        age[Animals.MOUSE.getValue()] = 10;

        for (int i = 0; i < age.length; i++) {
            System.out.print(age[i] + " ");
        }
    }
}

在Java中,enum是一种类。有关详细信息,请阅读this。 枚举没有默认值,您必须自己设置。在此示例中,它使用construcructor Animal(int value)完成。另外,我们不能像Animals.DOG那样使用整数值,但我们必须使用方法getValue()