我有下面的例子:
import java.util.EnumSet;
import java.util.Iterator;
public class SizeSet {
public static void main(String[] args) {
EnumSet largeSize = EnumSet.of(Size.XL,Size.XXL,Size.XXXL);
for(Iterator it = largeSize.iterator();it.hasNext();){
Size size = (Size)it.next();
System.out.println(size);
}
}
}
enum Size {
S, M, L, XL, XXL, XXXL;
}
在这段代码中,我可以理解Enum创建了一个大小为Size的Enum类型。
我的问题是:largeSize
是EnumSet类型的对象吗?它的真正含义是什么?我真的很想更好地理解它。
发布于 2012-08-06 16:59:12
对于任何变量,其类型都可以在其声明中找到:
EnumSet largeSize
所以,是的,largeSize
(应该命名为largeSizes
,因为它是一个集合)是EnumSet
类型。它也应该被泛化,并因此被声明为
EnumSet<Size> largeSizes
它的意思是,largeSizes
是EnumSet
类型。EnumSet
是一个Set
,它包含特定枚举类型的枚举实例,其方式比其他Set
实现(如HashSet
、TreeSet
等)更有效。要了解EnumSet
是什么,请阅读它的API。
发布于 2012-08-06 17:22:13
简化您的代码
EnumSet<Size> largeSize = EnumSet.of(Size.XXXL, Size.XXL, Size.XL, Size.L);
for(Size size: largeSize)
System.out.print(size+" ");
你可以看到largeSize是一个常规的集合,除了它是用来存储枚举的。这有什么不同呢?首先,JVM知道集合的所有可能值,这意味着它可以使用位图而不是存储所有对象,其中1表示项存在,0表示项不存在。这也意味着集合的顺序是序数值的顺序,即它们被定义的顺序。这就是为什么这个打印出来
L XL XXL XXXL
如果您想了解更多细节,我建议您阅读本课程的源代码。
发布于 2015-01-09 16:43:47
EnumSet专门用于存储枚举类型元素并快速迭代它。例如:
for (Day d : EnumSet.range(Day.MONDAY, Day.FRIDAY))
System.out.println(d);
上面的代码片段将显示一周中从星期一到星期五的日期。
https://stackoverflow.com/questions/11825009
复制相似问题