打字猴:1.700446625e+09
1700446625
1700446626 JumboEnumSet(Class<E>elementType, Enum[]universe){
1700446627
1700446628 super(elementType, universe);
1700446629
1700446630 //默认长度是枚举项数量除以64再加1
1700446631
1700446632 elements=new long[(universe.length+63)>>>6];
1700446633
1700446634 }
1700446635
1700446636 void addAll(){
1700446637
1700446638 //elements中每个元素表示64个枚举项
1700446639
1700446640 for(int i=0;i<elements.length;i++)
1700446641
1700446642 elements[i]=-1;
1700446643
1700446644 elements[elements.length-1]>>>=-universe.length;
1700446645
1700446646 size=universe.length;
1700446647
1700446648 }
1700446649
1700446650 }
1700446651
1700446652 JumboEnumSet类把枚举项按照64个元素一组拆分成了多组,每组都映射到一个long类型的数字上,然后该数组再放置到elements数组中。简单来说JumboEnumSet类的原理与RegularEnumSet相似,只是JumboEnumSet使用了long数组容纳更多的枚举项。
1700446653
1700446654 不过,你会不会觉得这两段程序看着很让人郁闷呢?其实这是因为我们在开发中很少用到位移操作。读者可以这样理解,RegularEnumSet是把每个枚举项编码映射到一个long类型数字的每个位上,JumboEnumSet是先按照64个一组进行拆分,然后每个组再映射到一个long类型数字的每个位上,从这里我们也可以看出数字编码的奥秘!
1700446655
1700446656 从以上的分析可以看出,EnumSet提供的两个实现都是基本的数字类型操作,其性能肯定比其他的Set类型要好很多,特别是Enum的数量少于64的时候,那简直就是飞一般的速度。
1700446657
1700446658 注意 枚举项数量不要超过64,否则建议拆分。
1700446659
1700446660
1700446661
1700446662
1700446663 编写高质量代码:改善Java程序的151个建议 [:1700438162]
1700446664 编写高质量代码:改善Java程序的151个建议 建议90:小心注解继承
1700446665
1700446666 Java从1.5版开始引入了注解(Annotation),其目的是在不影响代码语义的情况下增强代码的可读性,并且不改变代码的执行逻辑,对于注解始终有两派争论,正方认为注解有益于数据与代码的耦合,“在有代码的周边集合数据”;反方认为注解把代码和数据混淆在一起,增加了代码的易变性,削弱了程序的健壮性和稳定性。这些争论暂且不表,我们要说的是一个我们不常用的元注解(Meta-Annotation):@Inherited,它表示一个注解是否可以自动被继承,我们来看它应如何使用。
1700446667
1700446668 思考一个例子,比如描述鸟类,它有颜色、体型、习性等属性,我们以颜色为例,定义一个注解来修饰一下,代码如下:
1700446669
1700446670 @Retention(RetentionPolicy.RUNTIME)
1700446671
1700446672 @Target(ElementType.TYPE)
1700446673
1700446674 @Inherited
[ 上一页 ]  [ :1.700446625e+09 ]  [ 下一页 ]