- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 java 编写一个程序,其中一部分必须评估蛋白质序列中的切割。我必须评估 split 是否发生在两端的某些组上,从而导致 if、else/elseif 语句在多个位置、嵌套或只是几个“if”和/或“else”中带有烦人的逻辑。我使用 switch 作为替代方法,不必在每次 split 发生时评估多个“if”和逻辑(&&、||)(此循环实际上将迭代数百万次,可能数千万或数亿次)。
这是代码块:-.getSeq() 获取表示蛋白质序列的字符串-startPos 和 endPos 是两端裂解的索引- 抱歉,如果 if 语句行被分成多行或令人费解,但这就是我的情况和关于逻辑的观点。
/**0: non-tryptic, 1: half-tryptic, 2: fully tryptic**************/
public boolean checkPep(int trypticity){
boolean evaluator = false;
int prev = 0;
if (startPos != 0){
prev = 1;
}
switch(trypticity){
/**do not check cleavage if peptide can be non-tryptic*/
case 0:
evaluator = true;
break;
/***half-tryptic*/
/**check if either the start OR end cleavage is tryptic*/
case 1:
switch(protein.getSeq().charAt(startPos-prev)){
case 'K':
evaluator = true;
break;
case 'R':
evaluator = true;
break;
default :
switch(protein.getSeq().charAt(endPos)){
case 'K':
evaluator = true;
break;
case 'R':
evaluator = true;
break;
default:
evaluator = false;
break;
}
break;
}
break;
/**fully tryptic*/
/**if first cleavage is tryptic, check end cleavage*/
/**evaluator = true IFF both cleavages are tryptic*******/
case 2:
if(((protein.getSeq().charAt(startPos-1)) == 'K') || ((protein.getSeq().charAt(startPos-1)) == 'R')){
if(((protein.getSeq().charAt(endPos)) == 'K') || ((protein.getSeq().charAt(endPos)) == 'R')){
evaluator = true;
}else{
evaluator = false;
}
}else{
evaluator = false;
}
break;
}
return evaluator;
}
最佳答案
这种事情就是我们所说的微优化。
使用 switch
代替 if
链可能是有益的……也可能没有。这在很大程度上取决于上下文。
唯一确定的方法是仔细对代码进行基准测试,比较有和没有潜在优化的版本。首先分析一下也是一个好主意,这样您就不会浪费时间优化无关紧要的代码。
请注意,给定微优化的效果可能会有所不同,具体取决于您的实际执行硬件、操作系统和 JVM 版本/风格。 (也可能还有其他事情......比如有多少物理内存可用以及堆有多大。)预测第一原理的好处是很困难的,并且平台更改总是有可能使您所有的手动调整工作失效.
关于java - Switch 的效率是否值得将其用于嵌套条件而不是 if、else?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11236490/
我正在生成代码,其中我恰好将 n 个单词从一个内存位置复制到另一个非重叠内存位置。 n 是静态已知的。 目前,我发出大量加载指令,然后是大量存储指令,但我怀疑从 n 的某个值开始,调用 memcpy会
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
用例如下: 我有一张 map ,其中将插入一些键/值。 该程序将查询该 map ,但是在第一个查询之后,我可以保证该 map 将完全不会被修改。 因为查询的结果完全是输入的函数,所以在查询方法上放置属
Helo 伙计们,我尝试使用 Refs 并在他的内部提供 this.setState 但它给出: Maximum update depth exceeded. This can happen when
在检查事件时,使用带有 switch 或 if 的代码块是很常见的事情。如果变得简单,它可以是干净的代码,但似乎仍然有比需要更多的行,并且可以使用 lambda 进行简化。 用 if 阻止: if(a
Amazon 最近宣布在其 RDS 产品线中支持 Oracle: http://aws.amazon.com/rds/oracle/ 我想知道是否有人使用过它,或者是否有令人信服的理由将我的数据从 M
我是一名优秀的程序员,十分优秀!