如果程序中有如下方法,该方法调用率非常非常的高,如果改写此方法,让程序执行效率高些?只要达到目的,什么方法都行谢谢public boolean test(String target)
{
if(target == null)
return false;
String source = "substr1;substr2;substr3;substr4;substr5...";
String [] strs = source.split(";");
for(int i = 0; i < strs.length; i++)
{
if(target.startsWith(strs[i]))
return true;
}
return false;
}
{
if(target == null)
return false;
String source = "substr1;substr2;substr3;substr4;substr5...";
String [] strs = source.split(";");
for(int i = 0; i < strs.length; i++)
{
if(target.startsWith(strs[i]))
return true;
}
return false;
}
解决方案 »
- 把一篇英文文档拆分成句子
- 求助,java的一个小问题
- 用java如何以二进制的形式判断一个文件是pdf或word或excel?
- JFrame中组件过多,隐藏后重新显示很慢问题?
- 简单问题? 急!
- 我的WIN2000环境变量中为什么没有classpath也可以运行JAVA?
- 为控件加 Listener 的一点问题,大家说说什么的方法
- 有 3 年以上工作经验的请进, 顶级高手手请进 ! 一个巨难的 FTP 的问题 !
- --成都地区软件企业薪酬概况--
- 怎么样使用java生成一个word文档,求个例子,word的格式可以自己定义和排版。
- jsp中SQL语句引用变量的详细语法
- 求HttpClients软件包的下载地址,请各位大侠帮忙啊
String source是个常量,可以先不考虑这个。下面这个循环,有没有办法转化为非String的比较,有没有方法很高效地找出target是不是以strs[i]开始的字符串?for(int i = 0; i < strs.length; i++)
{
if(target.startsWith(strs[i]))
return true;
}
将每次比较的结果放在hashtable 或者vector里面,每次先从先前的结果里面找,如果找不到再用startsWith比较,效率是不是会高些呢?
谢谢
关键要从source的特征入手,比如source的长度,source子串的模式特征。只有知道这些特征才能更好下手。你可以考虑有几种常见的方式:对strs排序,二分匹配;使用搜索树;自定义一个hash函数。这几种方法只适用于strs数量比较大的时候。另外强调三点:一、对strs使用缓存,不要每次都计算。既然你在意性能,有必要修改。
二、顺序匹配是最通用也最简单直观的方式,如果你想放弃这种算法,请确认确实有性能问题,并且性能问题确实出现在这里。
三、重新了解source特征和目标特征。
1、strs已使用缓存
2、如果整个应用程序每个操作都涉及此方法的话,我想这个匹配操作也是性能的障碍。
3、待我重新审视一下
其实我只是在意朋友说的一句话 “字符串匹配其实效率不高的”,而整个应该程序的正常运行需要时刻运行类似这个的方法!网上也查到调用String API其实不是明智的做法。所以我想到,现把匹配的结果保存在一个比从source里面查找更高效的对象里面,然后再用这个对象查找。所以我想问:保存先前匹配结果是不是个好办法?有什么类能满足更高效的要求?hashtable、vector还是其他?
谢谢