int num = 0 ;
if(num==1){
System.out.println(num);
}else if(num==2){
System.out.println(num);
}else if(num==3){
System.out.println(num);
}else if(num==0){
System.out.println(num);
}
switch(num){
case 1;
System.out.println(num);
break;
case 2:
System.out.println(num);
break;
case 3:
System.out.println(num);
break;
case 0:
System.out.println(num);
break;
}这种请何况下那个效率高?我认为是switch更好一些,它只会判断一次,if需要判断多次才行所以高,对嘛?
if(num==1){
System.out.println(num);
}else if(num==2){
System.out.println(num);
}else if(num==3){
System.out.println(num);
}else if(num==0){
System.out.println(num);
}
switch(num){
case 1;
System.out.println(num);
break;
case 2:
System.out.println(num);
break;
case 3:
System.out.println(num);
break;
case 0:
System.out.println(num);
break;
}这种请何况下那个效率高?我认为是switch更好一些,它只会判断一次,if需要判断多次才行所以高,对嘛?
int num = 5;//第一个
for(int i = 0 ; i < lList.size();i++){
if("a".eqauls(lList.get(i).getName)){
if(num>lList.get(i).getBule){
System.out.println("Bule");
}
if(num>lList.get(i).getYellow&&num<lList.get(i).getOrange){
System.out.println("Yellow");
}
if(num>lList.get(i).getOrange&&num<lList.get(i).getRed){
System.out.println("Orange");
}
if(num>=lList.get(i).getRed){
System.out.println("Red");
}
}
}
//第二个
for(int i = 0 ; i < lList.size();i++){
if("b".eqauls(lList.get(i).getName)){
if(num>lList.get(i).getBule){
System.out.println("Bule");
}
if(num>lList.get(i).getYellow&&num<lList.get(i).getOrange){
System.out.println("Yellow");
}
if(num>lList.get(i).getOrange&&num<lList.get(i).getRed){
System.out.println("Orange");
}
if(num>=lList.get(i).getRed){
System.out.println("Red");
}
}
}
//第三个
for(int i = 0 ; i < lList.size();i++){
if("c".eqauls(lList.get(i).getName)){
if(num>lList.get(i).getBule){
System.out.println("Bule");
}
if(num>lList.get(i).getYellow&&num<lList.get(i).getOrange){
System.out.println("Yellow");
}
if(num>lList.get(i).getOrange&&num<lList.get(i).getRed){
System.out.println("Orange");
}
if(num>=lList.get(i).getRed){
System.out.println("Red");
}
}
}------------------------------------------------------------------------------------Map<Limit> lMap = new HashMap<Limit>();
List<Limit> lList = new ArrayList<Limit>();
int num = 5;for(int i = lList.size();i>=0 ;i--){
lMap.put(lList.get(i).getName,lList.get(i));
}//第一个 if(num>lMap.get("a").getBule){
System.out.println("Bule");
}
if(num>lMap.get("a").getYellow&&num<lMap.get("a").getOrange){
System.out.println("Yellow");
}
if(num>lMap.get("a").getOrange&&num<lMap.get("a").getRed){
System.out.println("Orange");
}
if(num>=lMap.get("a").getRed){
System.out.println("Red");
}
}
}
//第二个 if(num>lMap.get("b").getBule){
System.out.println("Bule");
}
if(num>lMap.get("b").getYellow&&num<lMap.get("b").getOrange){
System.out.println("Yellow");
}
if(num>lMap.get("b").getOrange&&num<lMap.get("b").getRed){
System.out.println("Orange");
}
if(num>=lMap.get("b").getRed){
System.out.println("Red");
}
}
}
//第三个 if(num>lMap.get("c").getBule){
System.out.println("Bule");
}
if(num>lMap.get("c").getYellow&&num<lMap.get("c").getOrange){
System.out.println("Yellow");
}
if(num>lMap.get("c").getOrange&&num<lMap.get("c").getRed){
System.out.println("Orange");
}
if(num>=lMap.get("c").getRed){
System.out.println("Red");
}
}
}-------------------------------------------------------------------------------------
以上2种那个更效率更快一些呢?哪怕是一点点。我觉得第二种的Map会更快一些。少了循环次数和判断啊。大鸟说说吧
System.out.println(num); 这里如果不break 还会继续往下执行,所以他们是一样的 都是要判断的 只是 后者清晰
5楼每次打出的时间不一样的,耗时是不一样的所以不准从原理,从底层那个更快?
Map与List是独立的两个接口
效率都可以把,map是键值对应,应该查找更快!
case 3:
System.out.println(num); 这里如果不break 如果下面的符合条件 还会继续往下执行,(说明还是做判断了) 所以他们执行时间应该是一样的 只是 后者是程序显得清晰
和
switch之间没有任何关系一点都没有,如果有人非要说两者可以转换,那么只能说是对于编程人员直接用眼睛来看的话是可以转换的。if-else 如果有M个叠加,条件是你写的第n个,那么会执行n次。
而
switch 不管case有多少个,都只是进行一次判断。除非你的编译器把switch又给编译成if-else之后然后再进行下一步编译。
忘了说一句,switch判断一次的前提是要在每个case后面记得加上break;否则按顺序依次判断。
case 加 break 是百分百的事情,,我们就不拿这个说事了。我个人觉得switch 快, 理由一会补上第二个问题,我觉得Map快 理由一会补上。谁有好的意见就说,别说打印时间,那是不准的。
先说Map和List 的问题,就是我在4楼发的问题。数据读上来之后 存放到lList之后用过3个for循环进行遍历,在遍历的同时查找名字getName 。进行比对如果是a,equals判断通过就进入到if, 4个IF判断并输出颜色。不管用Map还是List这4个判断是无法避免的,想提高效率只能从外围下手。----------------------------进行了3个for的遍历,和3次 getName() 的判断。
而且每次for循环的时候也都需要进行一次lList.size()这个方法,它也是好资源的,而且每次循环都需要进行一次并且做判断,之后还要做一次if(equals) 判断。----------------------------------------------
而第二种呢,只是遍历了一次。而且第二种的for要比第一种lList打的for效率要高。并且在for中没有做判断,直接全部存到Map当中。
少了for循环和判断的过程,所以我认为第二种高,高多少并不重要。
----------------------------有人就会说你还多创建了一个Map对象呢,这种效率我不会算··所以还需要高人出来指点一下···凭感觉说话的朋友就算了···大家给点意见吧··我说的对吗
·今天可以是讨论,可以是研究,但是不可以是炮轰。谢谢。
第一个问题的回答:
if(条件1) {分支1};
else if(条件n) {分支n}
else {分支n+1}
嵌套分支语句:其语句格式为:
嵌套分支语句虽可解决多个入口和出口的问题,但超过3重嵌套后,语句结构变得非常复杂,对于程序的阅读和理解都极为不便,建议嵌套在3重以内,超过3重可以用switch实现。switch开关语句:该语句也是多分支选择语句,到底执行哪一块,取决于开关设置,也就是表达式的值与常量表达式相匹配的那一路,它不同if…else 语句,它的所有分支都是并列的,程序执行时,由第一分支开始查找,如果相匹配,执行其后的块,接着执行第2分支,第3分支……的块,直到遇到break语句;如果不匹配,查找下一个分支是否匹配。这个语句在应用时要特别注意开关条件的合理设置以及break语句的合理应用。 switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化,所以在多路分支时用switch比if..else if .. else结构要效率高。
===========*上面部分大都是找到的资料*===========
个人理解:switch 会比 if..else if .. else 快,怎么个快法就不说了(我也说不上来,太底层没怎么研究),
但switch 只判断整型值的吧,String等等就判断不了吧,所以if..else if ..else和switch 各有各的好处。第二个问题的回答:
搂主有回复就不多说了,
List 用多个循环及判断来处理,效率上自然要慢了。
Map 用List一个循环赋值后,再判断减少多个循环及判断次数,我想你就是打印时间上来看也可以看出。
但搂主给出的 Map 键值是已知的写死的(当然这只是楼主给出的一个试例,只是要我们说下谁快谁慢的问题),在不知的情况下这种方法就不实用了。
我想说的是效率、占CPU大小不是最主要的,能够解决问题并能够实现、完成要求才是最好的(个人追求效率的除外)。
原因就是在你还在苦想着少占CPU二个点数的时间,别人已经做出来了。
这位朋友说的有点意思···Map里面的值是固定了··就是说我给的a,b,c是固定 真是代码也是一样的。辛苦了 写了这么多···在等等,看看还有没有其他高手对此简单问题给点意见。
int num = 0;
long is = System.currentTimeMillis();
for (int i = 0; i < 1000000000; i++) {
if (num == 1) {
} else if (num == 2) {
} else if (num == 3) {
} else if (num == 0) {
}
}
System.out.println("" + (System.currentTimeMillis() - is)); long ss = System.currentTimeMillis();
for (int i = 0; i < 1000000000; i++) {
switch (num) {
case 1:
break;
case 2:
break;
case 3:
break;
case 0:
break;
}
}
System.out.println("" + (System.currentTimeMillis() - ss));
}
}
/*
run:多次测试都差不多是这个数
2906
2235
成功生成(总时间:5 秒)
*/
我知道这个效率上不会差很多的···对于平台及软件来说OK啊··小项目更没的说··更不会再以··这是一种思想·代码的风格··效率只能提高一点点点··总结··好的代码风格··好的结构··更容易让代码清晰可见。。效率虽然只是高了那么微微的一点点··但是就是高··这个是事实。哪怕只是高1MS ,也是高··所以应该使用第二种形式。