日期:2014-05-20  浏览次数:20793 次

[求教]简单查找问题,怎样效率高一点?
如果程序中有如下方法,该方法调用率非常非常的高,如果改写此方法,让程序执行效率高些?

只要达到目的,什么方法都行

谢谢

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;
}

------解决方案--------------------
String source = "substr1;substr2;substr3;substr4;substr5... ";

String [] strs = source.split( "; ");

至少这个是没必要的,都是固定的,没必要放在方法里面,要么作为类成员,要么作为参数直接传进去,split用到了正则式,效率比较低
------解决方案--------------------
就是阿,可以传参数进来阿,或者改成indexof();不知道你的String source;是不是一个常量呢?
------解决方案--------------------

关键要从source的特征入手,比如source的长度,source子串的模式特征。只有知道这些特征才能更好下手。

你可以考虑有几种常见的方式:对strs排序,二分匹配;使用搜索树;自定义一个hash函数。这几种方法只适用于strs数量比较大的时候。

另外强调三点:

一、对strs使用缓存,不要每次都计算。既然你在意性能,有必要修改。
二、顺序匹配是最通用也最简单直观的方式,如果你想放弃这种算法,请确认确实有性能问题,并且性能问题确实出现在这里。
三、重新了解source特征和目标特征。