首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EnumSet到底是什么意思?

EnumSet到底是什么意思?
EN

Stack Overflow用户
提问于 2012-08-06 16:44:11
回答 10查看 62K关注 0票数 72

我有下面的例子:

代码语言:javascript
复制
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类型的对象吗?它的真正含义是什么?我真的很想更好地理解它。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2012-08-06 16:59:12

对于任何变量,其类型都可以在其声明中找到:

代码语言:javascript
复制
EnumSet largeSize

所以,是的,largeSize (应该命名为largeSizes,因为它是一个集合)是EnumSet类型。它也应该被泛化,并因此被声明为

代码语言:javascript
复制
EnumSet<Size> largeSizes

它的意思是,largeSizesEnumSet类型。EnumSet是一个Set,它包含特定枚举类型的枚举实例,其方式比其他Set实现(如HashSetTreeSet等)更有效。要了解EnumSet是什么,请阅读它的API

票数 48
EN

Stack Overflow用户

发布于 2016-01-03 20:57:17

简单Enum是一组值,一次只能从中选择一个。使用您的示例,对于任何给定的布料,尺寸只能是S、M、L等之一。您可以使用简单的常量而不是Enum,但这具有可读性、更容易维护和严格的类型检查等优点。

当您需要一个变量同时使用多个Enum值时,将使用EnumSet。例如,您在屏幕上使用的字体可以同时使用粗体和斜体。EnumSet将允许您添加各种值,并测试在任何给定时间是否实际设置了其中一个值。如果您是从其他编程语言来到Java的,那么这就是通常称为标志的功能。

比较这两个:

代码语言:javascript
复制
enum Size { S, M, L, XL, XXL, XXXL }
Size currentSize;
...
currentSize = Size.S;
...
if (currentSize == Size.S) ...

定义、分配并检查单个Enum值。

代码语言:javascript
复制
enum FontStyle { Bold, Italic, Underline, Strikethrough }
EnumSet<FontStyle> currentStyle;
...
currentStyle = EnumSet.of(FontStyle.Bold, FontStyle.Italic);
...
if (currentStyle.contains(FontStyle.Italic)) ...

同时定义并分配两个Enum值,然后检查其中一个值是否已实际设置。

票数 44
EN

Stack Overflow用户

发布于 2012-08-06 17:22:13

简化您的代码

代码语言:javascript
复制
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表示项不存在。这也意味着集合的顺序是序数值的顺序,即它们被定义的顺序。这就是为什么这个打印出来

代码语言:javascript
复制
L XL XXL XXXL

如果您想了解更多细节,我建议您阅读本课程的源代码。

票数 40
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11825009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档