List.copyOf( EnumSet.allOf( Gender.class ) )
警告:正如JB Nizet 所提到的,除了最极端的情况外,这种优化练习似乎很愚蠢。对于实际工作,我可能会推荐Marko Topolnik 的答案中看到的解决方案。但是,为了好玩,我在这个球上挥动了球棒。
似乎目标是通过给定的数字 0、1、2 快速访问呈现静态不可修改的集合。
从 Java 10开始,我们在接口上有这些新实现的(“默认”</a>)方法List
:List.of
& List.copyOf
。这些产生一个不可修改的集合。尽管支持的实现没有记录并且可能会发生变化,但我会假设它类似于具有相似性能的数组。EnumSet
如果后备实现检测到存在并使用某种位向量,则性能甚至可能比传统数组更快。
List
我通过传递一个EnumSet
to 来填充List.copyOf( Collection )
。
所以这:
private static final SparseArray<Gender> lookupTable = new SparseArray<Gender>();
static {
for (final Gender gender : EnumSet.allOf(Gender.class)) {
lookupTable.put(gender.intValue, gender);
}
}
…变成这样:
private static final List < Gender > lookupTable = List.copyOf( EnumSet.allOf( Gender.class ) );
整个课程,main
用于演示。
package com.basilbourque.example;
import java.util.EnumSet;
import java.util.List;
public enum Gender {
UNKNOWN( 0 ),
MALE( 1 ),
FEMALE( 2 );
private static final List < Gender > lookupTable = List.copyOf( EnumSet.allOf( Gender.class ) );
private final int intValue;
public static Gender getByIntValue ( int val ) {
return lookupTable.get( val );
}
public int getIntValue () {
return intValue;
}
// Constructor
private Gender ( int intValue ) {
this.intValue = intValue;
}
public static void main ( String[] args ) {
// Testing.
System.out.println( Gender.UNKNOWN.intValue );
System.out.println( Gender.getByIntValue( 0 ) );
System.out.println( "----" );
System.out.println( Gender.MALE.intValue );
System.out.println( Gender.getByIntValue( 1 ) );
System.out.println( "----" );
System.out.println( Gender.FEMALE.intValue );
System.out.println( Gender.getByIntValue( 2 ) );
}
}
跑的时候。
0
未知
1
男性
2
女性
顺便说一句,作为生物默认,FEMALE
应该先来MALE
。