枚举代替switch并实现和switch同级别O(1)时间复杂度获取名称值
当然啦你要是试过switch和hashmap的速度,你就会知道switch真的快,如果你把switch改为if else,那你又觉得以后只用if else了,hhhh。没有最强只有最合适,需要性能只写if else,为了开发效率则择优选择。
最近边做边玩,看着一个新功能要每个方法写一个switch心生不爽,就给他列巴列巴,看着已经使用了枚举类型,干脆一不做二不休,把枚举搞一搞,说来也巧,枚举搞switch很简单。数组就行,如果有字符串那就加个哈希。自己写呗。
我希望通过输入的类型(输入的类型是数字,数字与实际含义通过指定规则对应)直接获取到指定的规则名称。代码如下
最简单且通用的实现,就是循环遍历了
/**
* 公告类型:1-公告1;2-公告2;3-公告3;4-公告4
* */
@AllArgsConstructor @Getter
public enum Notice_type{
ONE("公告1",1),TWO("公告2",2),THREE("公告3",3),FORE("公告4",4);
private final String noticeTypeName;
private final Integer value;
/** O(n)获取封公告类型名称
* @param type
* @return
*/
public static Notice_type get(int type){
for (Notice_type p: Notice_type.values()) {
if(type == p.value){
return p;
}
}
return null;
}
}
之后就是极致的数组O(1)了
/**
* 公告类型:1-公告1;2-公告2;3-公告3;4-公告4
* */
@AllArgsConstructor @Getter
public enum Notice_type{
ONE("公告1",1),TWO("公告2",2),THREE("公告3",3),FORE("公告4",4);
private final String noticeTypeName;
private final Integer value;
/** O(1)获取封公告类型名称 极致效率,但方法不通用,维护成本高
* @param value
* @return
*/
public static String get(int value){
//改到极致则仅能用于此方法
if (value > 4 || value < 0) {
return null;
}
String[] name = {
"公告1","公告2","公告3","公告4"};
return name[value-1];
}
}
将名称写入数组,通过下标对应,模仿hash实现思路,我这里只需要value-1这样简单的hash规则,复杂的对应规则就要自己实现喽。