【枚舉】_類集對Enum的支援筆記
本章目標:
掌握EnumMap類的使用
掌握EnumSet類的使用
3、具體內容
3.1、EnumMap
定義格式:
public class EnumMap<K extends Enum<K>,V>
extends AbstractMap<K,V>
implements Serializable,Cloneable
範例:
import java.util.EnumMap;import java.util.Map;enum Color{ RED,GREEN,BLUE;}public class EnumMapDemo{ public static void main(String args[]){ Map<Color,String> desc = null; desc = new EnumMap<Color,String>(Color.class);//執行個體化EnumMap對象 desc.put(Color.RED,"紅色"); desc.put(Color.GREEN,"綠色"); desc.put(Color.BLUE,"藍色"); System.out.println("=====輸出全部的內容====="); for(Color c:Color.values()){ System.out.println(c.name()+"-->"+desc.get(c)); } System.out.println("=====輸出全部的索引值====="); for(Color c:desc.keySet()){ System.out.print(c.name()+"、"); } System.out.println(); System.out.println("=====輸出全部的內容====="); for(String s:desc.values()){ System.out.println(s+"、"); } }}
3.2、EnumSet
EnumSet是Set介面的子類,所以裡面的內容是無法重複的,在使用EnumSet的時候是不能直接使用關鍵字new為其進行執行個體化的,所以在此類中提供了很多的靜態方法。
依次驗證EnumSet類的方法
範例:將全部的集合設定到EnumSet集合之中。
import java.util.EnumSet;enum Color{ RED,GREEN,BLUE;}public class EnumSetDemo01{ public static void main(String args[]){ EnumSet<Color> es = null; System.out.println("====EnumSet.allOf(Color.class)====="); es = EnumSet.allOf(Color.class);//將枚舉的全部類型設定到EnumSet對象之中 print(es); } public static void print(EnumSet<Color> temp){//專門的輸出操作 for(Color c:temp){ System.out.print(c+"、"); } System.out.println(); }}
範例:只設定一個內容到集合
import java.util.EnumSet;enum Color{ RED,GREEN,BLUE;}public class EnumSetDemo02{ public static void main(String args[]){ EnumSet<Color> es = null; System.out.println("====EnumSet.of(Color.BLUE)======"); es = EnumSet.of(Color.BLUE);//將枚舉的一個內容設定到EnumSet對象之中 print(es); } public static void print(EnumSet<Color> temp){//專門的輸出操作 for(Color c:temp){ System.out.print(c+"、"); } System.out.println(); }}
建立只能放入指定枚舉類型的集合
可能同時有多個類型的枚舉對象,但是一個集合中只要求放入指定類型的枚舉。
import java.util.EnumSet;enum Color{ RED,GREEN,BLUE;}public class EnumSetDemo03{ public static void main(String args[]){ EnumSet<Color> es = null; //聲明一個EnumSet對象 System.out.println("=====EnumSet.noneOf(Color.class)======"); es = EnumSet.noneOf(Color.class);//將枚舉的全部類型設定到EnumSet對象之中 es.add(Color.RED); //增加內容 es.add(Color.GREEN); //增加內容 print(es); } public static void print(EnumSet<Color> temp){ for(Color c:temp){ System.out.print(c+"、"); } System.out.println(); }}
還可以建立不包含制定元素的集合。
import java.util.EnumSet;enum Color{ RED,GREEN,BLUE;}public class EnumSetDemo04{ public static void main(String args[]){ EnumSet<Color> esOld = null; EnumSet<Color> esNew = null; System.out.println("====EnumSet.complementOf(Color.class)===="); esOld = EnumSet.noneOf(Color.class); esOld.add(Color.RED); esOld.add(Color.GREEN); esNew = EnumSet.complementOf(esOld); //不包括指定內容 print(esNew); } public static void print(EnumSet<Color> temp){ for(Color c:temp){ // 迴圈輸出EnumSet中的內容 System.out.print(c+"、"); } System.out.println(); }}
還可以拷貝一個集合的內容
import java.util.EnumSet;enum Color{ RED,GREEN,BLUE;}public class EnumSetDemo05{ public static void main(String args[]){ EnumSet<Color> esOld = null; EnumSet<Color> esNew = null; System.out.println("====EnumSet.copyOf(Color.class)===="); esOld = EnumSet.noneOf(Color.class); esOld.add(Color.RED); esOld.add(Color.GREEN); esNew = EnumSet.copyOf(esOld); //從已有的集合拷貝過來 print(esNew); } public static void print(EnumSet<Color> temp){ for(Color c:temp){ System.out.print(c+"、"); } System.out.println(); }}
總結:
1、EnumMap和EnumSet,EnumMap是符合Map的操作形式的,而EnumSet基本上就是使用靜態方法完成。
2、在操作中大量的使用了枚舉.class,這個屬於Java反射機制。