我想知道,EnumSet有什么原因吗?被实现为抽象类和EnumMap实现为具体类? 最佳答案 EnumSet实际上有两种实现-一种用于具有64个或更少元素的枚举(表示集合中存在值的标志存储为long),另一种用于其他枚举(标志存储为long[])。EnumSet的工厂方法根据传入的枚举类返回其中之一。这样的优化对EnumMap没有意义(因为无论如何都需要数组来存储值),因此EnumMap是一个具体的类。 关于java-为什么EnumSet实现为抽象类而EnumMap实现为具体类?,我们在
我想知道,EnumSet有什么原因吗?被实现为抽象类和EnumMap实现为具体类? 最佳答案 EnumSet实际上有两种实现-一种用于具有64个或更少元素的枚举(表示集合中存在值的标志存储为long),另一种用于其他枚举(标志存储为long[])。EnumSet的工厂方法根据传入的枚举类返回其中之一。这样的优化对EnumMap没有意义(因为无论如何都需要数组来存储值),因此EnumMap是一个具体的类。 关于java-为什么EnumSet实现为抽象类而EnumMap实现为具体类?,我们在
我正在尝试使用下面的位掩码代替代码publicstaticSetfromBitFlags(intbitFlag){returnALL_OPTS.stream().filter(a->(a.ameityId&bitFlag)>0).collect(Collectors.toSet());}我想返回EnumSet而不是一个普通的集合(不想因为强制转换而放弃EnumSet的用处)。需要一些关于如何创建自定义收集器来收集EnumSet的说明。 最佳答案 您可以使用toCollection(Supplier):returnALL_OPTS.s
我正在尝试使用下面的位掩码代替代码publicstaticSetfromBitFlags(intbitFlag){returnALL_OPTS.stream().filter(a->(a.ameityId&bitFlag)>0).collect(Collectors.toSet());}我想返回EnumSet而不是一个普通的集合(不想因为强制转换而放弃EnumSet的用处)。需要一些关于如何创建自定义收集器来收集EnumSet的说明。 最佳答案 您可以使用toCollection(Supplier):returnALL_OPTS.s
通过EnumSetof方法,我见过of的多个重载实现方法:publicstatic>EnumSetof(Ee)publicstatic>EnumSetof(Ee1,Ee2)..publicstatic>EnumSetof(Ee1,Ee2,Ee3,Ee4,Ee5)然后是另一个带有varargs的重载方法publicstatic>EnumSetof(Efirst,E...rest){EnumSetresult=noneOf(first.getDeclaringClass());result.add(first);for(Ee:rest)result.add(e);returnresult;
通过EnumSetof方法,我见过of的多个重载实现方法:publicstatic>EnumSetof(Ee)publicstatic>EnumSetof(Ee1,Ee2)..publicstatic>EnumSetof(Ee1,Ee2,Ee3,Ee4,Ee5)然后是另一个带有varargs的重载方法publicstatic>EnumSetof(Efirst,E...rest){EnumSetresult=noneOf(first.getDeclaringClass());result.add(first);for(Ee:rest)result.add(e);returnresult;
枚举是可比的,这意味着你可以拥有NavigableSetmodes=newTreeSet();NavigableMapmodeMap=newTreeMap();这些访问时间为O(lnN)。Enum集合的访问时间为O(1),但不可导航NavigableSetmodes=EnumSet.noneOf(AccessMode.class);//doesn'tcompileNavigableMapmodeMap=newEnumMap(AccessMode.class);//doesn'tcompile我想知道Enum集合是否不可导航(和排序)是否有原因。即我错过了什么吗?
枚举是可比的,这意味着你可以拥有NavigableSetmodes=newTreeSet();NavigableMapmodeMap=newTreeMap();这些访问时间为O(lnN)。Enum集合的访问时间为O(1),但不可导航NavigableSetmodes=EnumSet.noneOf(AccessMode.class);//doesn'tcompileNavigableMapmodeMap=newEnumMap(AccessMode.class);//doesn'tcompile我想知道Enum集合是否不可导航(和排序)是否有原因。即我错过了什么吗?
如果我有一个枚举,我可以使用方便的EnumSet类创建一个EnumSetenumSuit{CLUBS,DIAMONDS,HEARTS,SPADES}EnumSetreds=EnumSet.of(Suit.HEARTS,Suit.DIAMONDS);EnumSetblacks=EnumSet.of(Suit.CLUBS,Suit.SPADES);给定两个EnumSet,我如何创建一个包含这两个集合的并集的新EnumSet?EnumSetredAndBlack=? 最佳答案 EnumSet也是一个集合,因此您也可以使用许多Collect
EnumSet类定义为:publicabstractclassEnumSet>extendsAbstractSetimplementsCloneable,Serializable在JCF中。此外,类本身实现的大多数方法都是静态的。最后,该类似乎没有实现add(),iterator(),remove(),size(),contains()或isEmpty()方法,只是从不实现它们的AbstractSet继承它们。我有两个问题:究竟如何EnumSet对象被实例化和使用?为什么我可以使用add()EnumSet的方法对象? 最佳答案 你看