在Java中,Enum類型是一種非常有用的資料類型,它可以用來表示枚舉常數。而EnumMap是Java中一個特殊的Map實現,它只能儲存Enum類型的鍵值對。在本文中,我將介紹EnumMap函數的用法,以及如何在Java中使用EnumMap進行枚舉映射操作。
EnumMap5020972f684133d4ac6a4986ae645516, V>是一個Java中的泛型類,其中K表示枚舉類型的鍵,V表示映射到該鍵的值。 EnumMap建立後,其鍵必須來自同一個枚舉類型,且所有的值都必須是相同型別。以下是EnumMap函數的基本用法:
EnumMap<Weekday, String> enumMap = new EnumMap<>(Weekday.class); enumMap.put(Weekday.MONDAY, "星期一"); enumMap.put(Weekday.TUESDAY, "星期二"); enumMap.put(Weekday.WEDNESDAY, "星期三"); enumMap.put(Weekday.THURSDAY, "星期四"); enumMap.put(Weekday.FRIDAY, "星期五"); enumMap.put(Weekday.SATURDAY, "星期六"); enumMap.put(Weekday.SUNDAY, "星期日");
我們首先建立了一個EnumMap物件enumMap,並透過EnumMap中的put方法將每個星期幾和對應的中文名稱存入了該EnumMap中。這樣我們就完成了一個基本的EnumMap的建立與初始化。
在上面的程式碼範例中,我們使用了EnumMap的預設建構函數,它會自動將所有的值初始化為null。實際上,我們也可以使用EnumMap的另一個建構子來初始化。這個建構子會設定一個初始值,將EnumMap中的所有值初始化為這個初始值。以下是EnumMap函數的初始化範例程式碼:
EnumMap<Weekday, String> enumMap = new EnumMap<>(Weekday.class); enumMap.put(Weekday.MONDAY, "星期一"); enumMap.put(Weekday.TUESDAY, "星期二"); enumMap.put(Weekday.WEDNESDAY, "星期三"); enumMap.put(Weekday.THURSDAY, "星期四"); enumMap.put(Weekday.FRIDAY, "星期五"); enumMap.put(Weekday.SATURDAY, "星期六"); enumMap.put(Weekday.SUNDAY, "星期日"); // 使用初始化值,将所有键值对的值都设置为"假期" EnumMapdefaultEnumMap = new EnumMap<>(Weekday.class); defaultEnumMap.putAll(Collections.singletonMap(null, "假期")); EnumMap enumMapWithDefaultValue = new EnumMap<>(defaultEnumMap); enumMapWithDefaultValue.putAll(enumMap);
在上面的範例程式碼中,我們使用了Collections.singletonMap方法建立了一個只包含一個鍵值對的Map,它的鍵為null,值為"假期"。然後,我們使用這個Map作為初始值,建立了一個新的EnumMap物件enumMapWithDefaultValue,並將前面建立的enumMap中的鍵值對拷貝到了這個新的EnumMap物件中。
這個範例程式碼可以讓我們了解如何使用EnumMap的建構子來進行初始化,以及如何使用另一個Map作為初始值來建立一個新的EnumMap。
遍歷EnumMap中的所有元素通常是不可或缺的操作。我們可以使用Java中的迭代器來實現這個操作。以下是遍歷EnumMap的範例程式碼:
EnumMap<Weekday, String> enumMap = new EnumMap<>(Weekday.class); enumMap.put(Weekday.MONDAY, "星期一"); enumMap.put(Weekday.TUESDAY, "星期二"); enumMap.put(Weekday.WEDNESDAY, "星期三"); enumMap.put(Weekday.THURSDAY, "星期四"); enumMap.put(Weekday.FRIDAY, "星期五"); enumMap.put(Weekday.SATURDAY, "星期六"); enumMap.put(Weekday.SUNDAY, "星期日"); // 使用迭代器遍历EnumMap中的所有键值对 Iterator> iterator = enumMap.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry entry = iterator.next(); Weekday key = entry.getKey(); String value = entry.getValue(); System.out.println(key + ": " + value); } // 使用foreach循环遍历EnumMap中的所有值 for (String value : enumMap.values()) { System.out.println(value); }
在這個範例程式碼中,我們使用了Java中的迭代器來遍歷EnumMap中的所有鍵值對。我們先取得了該EnumMap的entrySet,然後使用entrySet回傳的迭代器來依序遍歷所有的鍵值對。對於每個鍵值對,我們使用getKey方法取得鍵,使用getValue方法取得值,並將它們輸出到控制台。
我們也可以使用foreach迴圈遍歷EnumMap中的所有值。將枚舉類型作為鍵進行取值即可,這種方式可以避免我們頻繁地使用getKey方法獲取鍵。
除了上面介紹的基本用法之外,EnumMap函數還有很多實際的應用情境。
4.1 枚舉映射操作
EnumMap最常見的用途是將枚舉類型對應到其他值。例如下面的範例程式碼中,我們將枚舉類型Weekday對應到數字(0-6):
public enum Weekday { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } // 使用EnumMap将Weekday枚举映射到数字 EnumMap<Weekday, Integer> enumMap = new EnumMap<>(Weekday.class); enumMap.put(Weekday.MONDAY, 0); enumMap.put(Weekday.TUESDAY, 1); enumMap.put(Weekday.WEDNESDAY, 2); enumMap.put(Weekday.THURSDAY, 3); enumMap.put(Weekday.FRIDAY, 4); enumMap.put(Weekday.SATURDAY, 5); enumMap.put(Weekday.SUNDAY, 6);
4.2 列舉型別計數器
在某些情況下,我們需要實作一個計數器來統計某個枚舉類型的數量。 EnumMap可以很方便地實現這個功能,範例程式碼如下:
public enum Gender { MALE, FEMALE } // 使用EnumMap实现枚举类型计数器 EnumMap<Gender, Integer> genderCount = new EnumMap<>(Gender.class); genderCount.put(Gender.MALE, 0); genderCount.put(Gender.FEMALE, 0); List<Gender> genderList = Arrays.asList( Gender.MALE, Gender.MALE, Gender.MALE, Gender.FEMALE, Gender.FEMALE ); for (Gender gender : genderList) { genderCount.put(gender, genderCount.get(gender) + 1); } System.out.println("男性数量:" + genderCount.get(Gender.MALE)); System.out.println("女性数量:" + genderCount.get(Gender.FEMALE));
在上面的範例程式碼中,我們首先建立了一個EnumMap物件genderCount,用於記錄Gender類型的數量。接著,我們使用EnumMap中的put方法將每個Gender類型的數量初始化為0。然後,我們使用一個List來模擬性別列表,並遍歷該列表,統計每個Gender出現的次數。最後,我們輸出了男性和女性的數量。
4.3 枚舉型別計算器
與枚舉型別計數器類似,EnumMap也可以用來實作枚舉型別的加法與減法。在下面的範例程式碼中,我們實作了一個簡單的計算器,用於統計某個英文字母在某個單字中出現的次數:
public enum Letter { A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z } // 使用EnumMap实现枚举类型计算器 EnumMap<Letter, Integer> letterCount = new EnumMap<>(Letter.class); for (Letter letter : Letter.values()) { letterCount.put(letter, 0); } String word = "Hello, World!"; for (int i = 0; i < word.length(); i++) { char c = word.charAt(i); if (c >= 'A' && c <= 'Z') { Letter letter = Letter.valueOf(String.valueOf(c)); letterCount.put(letter, letterCount.get(letter) + 1); } } for (Letter letter : Letter.values()) { if (letterCount.get(letter) > 0) { System.out.println(letter + ": " + letterCount.get(letter)); } }
在上面的範例程式碼中,我們首先創建了一個EnumMap物件letterCount,用來記錄每個字母出現的次數。然後,我們使用for迴圈來遍歷Letter枚舉類型,將每個字母的初始值都設為0。接著,我們定義了一個字串word,用於模擬單字。我們遍歷word中的每個字符,並判斷是否為大寫字母。如果是大寫字母,我們就用Letter.valueOf方法將其轉換為Letter類型,並對letterCount中對應的Letter類型數量進行累積。最後,我們遍歷Letter列舉型,並輸出出現次數大於0的字母和對應的次數。
總結
在本文中,我們介紹了EnumMap函數的基本用法、初始化、遍歷、實際應用等面向。 EnumMap是Java中非常實用的Map實現,它可以很好地與Enum類型配合使用,用於實現枚舉映射、枚舉類型統計、計算器等應用。掌握EnumMap的使用方法,有助於提升Java程式的開發效率與程式碼品質。
以上是如何使用Java中的EnumMap函數進行枚舉映射操作的詳細內容。更多資訊請關注PHP中文網其他相關文章!