2014-04-23 34 views
6

我用枚舉爲C.指標(每個枚舉類似的別名,一個int值) 例子:是否有以枚舉作爲索引的數組替代?

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

使用枚舉爲指標,我總是可以肯定的是我更新的權利細胞。此外,我還需要數組的簡單性。

我想在Java中做同樣的事情。但是,我似乎找不到一個簡單的替代品。 有沒有人知道可以使用與Array +枚舉組合在C中做的相同方式的替換?

+0

爲什麼?使用'Map'和'List'。 –

+0

您需要展示一個小例子,說明您想要實現的目標以及您想在何處以及如何使用枚舉。因此,對於只有很少或根本不瞭解'C'的Java開發人員來說,你的問題確實沒有什麼意義。 – SudoRahul

+0

我認爲這不存在。但如果是這樣,這應該是一個不好的做法,請記住,java是一種面向對象的語言。還要注意,在C中,這不是一個好的做法(你應該考慮數據類型抽象)。除非你想要做某些事情,比如鍵值,那麼你可以使用Map。 –

回答

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 
+0

謝謝你的詳細解答。讓我讀一讀,然後重新評論。但是爲了確保,你的意思是說CustomEnumID是我創建的一個自定義枚舉,並且它只會像上面所指示的那樣充當我的索引? – coffeenet

+0

缺少一個更好的通用術語,我使用了'CustomEnumID'。但是,「CustumEnumID」是一個自定義的枚舉類。 – DonyorM

+0

謝謝你的回答。我測試了它,它工作:)我開始喜歡這個網站:p – coffeenet

1

枚舉是Java中的很多對象。所以基本上你去HashMap是你想在你的代碼中引入Object-Object關係。

1

正如已經在其他的答案說,使用Map<YourEnum, V>就是做你想做的事有什麼好辦法。但是,實際上,Java有EnumMap(它確實實現了常規Map接口),該接口專爲與枚舉類型鍵一起使用而設計,並且如文檔中所述,它可能比使用HashMap更快。

0

在我看來,有兩種解決方案:

1)您可以在Java中的類模擬「C枚舉類型」:

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

在這種情況下,您可以手動設置值枚舉 - 在它由編譯器自動完成。枚舉

使用看起來像這樣

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 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中枚舉是一種類。詳情請參閱this。 枚舉沒有默認值,你必須自己設置。在這個例子中,它是用構造函數Animal(int value)完成的。另外,我們不能像整數值那樣使用Animals.DOG,但我們必須使用方法getValue()

+0

謝謝你的詳細解答!但是,我決定選擇DonyorM慷慨提供的選項。 – coffeenet