我曾经使用枚举作为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中那样使用的替换?
答案 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()
。