Bạn có thể sử dụng một EnumSet là tốt. Điều này cho phép bạn sử dụng các bit được đặt tên và có thể thân thiện hơn bằng cách sử dụng BitSet sử dụng các bit được lập chỉ mục.
Triển khai Cài đặt chuyên biệt để sử dụng với loại enum. Tất cả các phần tử trong một tập hợp enum phải đến từ một kiểu enum duy nhất được xác định, rõ ràng hoặc ngầm, khi tập hợp được tạo ra. Enum bộ được đại diện nội bộ như bits bit. Biểu diễn này cực kỳ nhỏ gọn và hiệu quả. Hiệu suất không gian và thời gian của lớp này phải đủ tốt để cho phép sử dụng nó như là một sự thay thế an toàn, chất lượng cao cho các cờ bit "int" truyền thống. Ngay cả các hoạt động hàng loạt (chẳng hạn như containsAll và retainAll) sẽ chạy rất nhanh nếu đối số của chúng cũng là một tập hợp enum.
ví dụ:
BitSet bs = new BitSet(4);
bs.set(1); // READY
bs.set(3); // LARGE_FLAG
boolean largeFlag = bs.get(1); // LARGE_FLAG
System.out.println("Using BitSet: "+bs);
EnumSet<Settings> settings = EnumSet.noneOf(Settings.class);
settings.add(Settings.READY);
settings.add(Settings.LARGE_FLAG);
boolean largeFlag2 = settings.contains(Settings.LARGE_FLAG);
System.out.println("Using EnumSet: "+settings);
in
Using BitSet: {1, 3}
Using EnumSet: [READY, LARGE_FLAG]
IMHO EnumSet là rõ ràng hơn nhiều nếu thích hợp của nó.
Nguồn
2012-01-13 09:10:38
[java.util.BitSet] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/BitSet.html)? Hay tôi đang thiếu một cái gì đó? – Mysticial
Geez ... Tôi nên dừng lại do dự và đăng những câu trả lời này ... – Mysticial
@Mysticial: Hãy do dự hơn một chút do dự. ;) – Mehrdad