java中关于switch case语句,多个case匹配相同的情况一些个人见解

java中关于switch case语句,多个case匹配相同的情况一些个人见解

		最近遇到了这样的一个需求。有这样的一个需求, 当类型传入1,2,3,5,7,9,10,11,12,13,14的时候需要把传入的num进行累加,如果类型传入4,6的时候需要把传入的num进行替换保留最大值,如果传入8的时候需要和目标值匹配,如果等于目标值则保存。
		开始的时候我使用if。。。。else的方式实现,发现算法的时间复杂度不稳定。		 
		  if(type==1
			//弹球大咖
			||type==2
			//弹球大神
			||type==3
			......){
		userAchievement.setFinishNum(userAchievement.getFinishNum()+finishNum);
	}else.....
	}
	当type==1的时候判断只会执行一次,但是如果越靠后的值,执行判断的次数就会越多。这时候需要考虑使用switch...case+枚举进行优化。
	先在枚举类型中加入getAchievementTypeByType的方法:
	public static enum AchievementType {
	INVITE_FRIENDS(1),//高朋满座
	BALL_SUPERIOR(2),//弹球大咖
	BALL_GOD(3),//弹球大神
	MAX_SCORE(4),//经典模式中达到#分
	FEARLESS(5),//浑身是胆
	PASS_EXPERT(6),//通关达人
	LOYAL_FANS(7),//忠实粉丝
	PRECISE_CONTROL (8),//精准控分
	VIEW_MARS(9),//皮肤战神
	LUCK_BOX(10),//手气爆棚
	CONTINUOUS_DOWN(11),//单次连续下落#层
	DESTROY_KING(12),//破坏之王 累积击碎XX层
	COUNT_VIDEO(13),//观看视频#次
	GET_MONEY(14),//大富豪
	ADD_TYPE(999);//累加类型(只为代码中返回)
    // 定义私有变量
    public int type ;
    // 构造函数,枚举类型只能为私有
    private AchievementType( int type) {
        this . type = type;
    }
    public static AchievementType getAchievementTypeByType(int type){
    	switch (type) {
		case 1:
			return INVITE_FRIENDS;
		case 2:
			return BALL_SUPERIOR;

。。。。。。
}
}

	GameStaticData.AchievementType aType = GameStaticData.AchievementType.getAchievementTypeByType(type);
	switch (aType) {
	case INVITE_FRIENDS:
	case BALL_SUPERIOR:
		。。。。。。
		break;
	default:
		。。。。。。
		}
		break;
	}
	这样的确是实现了这个需求,但是发现执行效率和之前的if差不多。
	现在我们就说下个人对switch case的执行过程中的一些理解:
	首先switch case在编译的时候会把case分成很多个内存,每个内存地址都是用的case中的值hash过后的,switch (aType) 中首先对传入的type进行hash,然后在jvm中调用对应的case的值中的代码块进行执行,如果没有,则执行default。如果有,则执行代码块,但是

你可能感兴趣的:(java中关于switch case语句,多个case匹配相同的情况一些个人见解)