gpt4 book ai didi

java - 非常快速地搜索 Java 中的特定字符

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:12:48 25 4
gpt4 key购买 nike

这似乎是一个有点愚蠢的问题……也许确实如此。但是我有一个我经常使用的功能,想知道这是否是完成这项工作的最快方法。该功能被使用了很多次,以至于任何速度的提高实际上都是显而易见的。它所做的只是检查字符是否为核苷酸(即:字符是否为“A”、“T”、“C”或“G”。

private static boolean isValidNucleotide(char nucleotide) {
nucleotide = Character.toUpperCase(nucleotide);
if(nucleotide == 'A') return true;
if(nucleotide == 'T') return true;
if(nucleotide == 'C') return true;
if(nucleotide == 'G') return true;
return false;
}

这是完成工作的最快方法吗?或者您是否认为值得实现某种索引/ map /其他东西(可能在函数外部执行比较并将此文本复制到代码中的几个位置)?我真的不是 Java 中这类事情的专家。

最佳答案

最快的(但内存效率最低的仍然是 255 字节还不错!)会像这样:

/* this is static member of class */
static boolean map[] = new boolean[256];
static {
for(int j = 0; j < map.length; j++)
map[j] = false;
/* map your required values true here */
map['A'] = true;
map['T'] = true;
map['C'] = true;
map['G'] = true;
/* make small letter here too */
map['a'] = true;
map['t'] = true;
map['c'] = true;
map['g'] = true;
}

然后做一个这样的函数:

private static boolean isValidNucleotide(char nucleotide) {
/* complexity is just one access to array */
return map[nucleotide];
}

正如@paxdiablo 所说,在 java 中,char 是 2 个字节而不是 1 个字节,但你的字符在这个范围内。只需将 return map[nucleotide]; 更改为 return map[0x00ff & nucleotide]; 即可。

为了安全起见,您还可以将 map 大小更改为 65536 并避免任何类型的错误。 boolean map = new boolean[65536]

关于java - 非常快速地搜索 Java 中的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14971316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com