我试图找到是否有一个很好的搜索方式(计数出现次数),然后以有效的方式排序一个String数组…这是一种在嵌入式系统(32Mb)中运行良好的一种方式,
示例:我必须计算字符A,B,C等使用的时间数,保存该后果分类的结果…
我可以使用public int count(String searchDomain,char searchValue)方法计数,但每个字符串应该有所有字母表,例如:
"This is a test string" A:1,B:0,C:0,D:0,E:1,I:3,F:0,... "ACAAGATGCCATTGTCCCCCGGCCTCCTGCTGCTGCTGCTCTCCGGGGCCACGGCCACCGCTGCCCTGCC" A:7,C:22,G:18
我的排序方法需要能够回答以下事情:按As,B的数量排序
先按As排序,然后按Bs排序子域
这不是作业,它是一个需要在手机上运行的应用程序,我需要这样才能高效,我目前的实现太慢,使用了太多的内存.
解决方法
我将利用Java(非常高效)内置的排序功能.首先,定义一个简单的类来包含你的字符串及其元数据:
class Item { // Your string. It's public,so you can get it if you want,// but also final,so you can't accidentally change it. public final String string; // An array of counts,where the offset is the alphabetical position // of the letter it's counting. (A = 0,B = 1,C=2...) private final short[] instanceCounts = new short[32]; public Item(String string) { this.string = string; for(char c : string.tocharArray()) { // Increment the count for this character instanceCounts[(byte)c - 65] ++; } } public int getCount(char c) { return instanceCounts[(byte)c - 65]; } }
这将保持您的字符串(用于搜索和显示),并设置一个匹配字符数的短数组. (如果你的内存真的很低,你知道你的字符串的任何一个字符都有255个以上,你甚至可以把它改成一个字节数组).一个short只有16个字节,所以数组本身只能取64无论字符串多么复杂,所有字节都在一起.如果您愿意每次计算计数时的性能值,您可以摆脱数组并替换getCount()方法,但是您可能会最终通过消耗频繁的垃圾回收来节省一次性内存记忆力,这是一个很大的表现.