枚举代替switch并实现和switch同级别O(1)时间复杂度获取名称值

枚举代替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规则,复杂的对应规则就要自己实现喽。

猜你喜欢

转载自blog.csdn.net/w4187402/article/details/106999832