请查看以下代码
//Devide the has into set of 3 pieces
private void devideHash(String str)
{
int lastIndex = 0;
for(int i=0;i<=str.length();i=i+3)
{
lastIndex = i;
try
{
String stringPiece = str.substring(i, i+3);
// pw.println(stringPiece);
hashSet.add(stringPiece);
}
catch(Exception arr)
{
String stringPiece = str.substring(lastIndex, str.length());
// pw.println(stringPiece);
hashSet.add(stringPiece);
}
}
}
上述方法接收类似abcdefgjijklmnop
的字符串作为参数。在方法内部,它的工作是划分这3组字母。因此,当操作完成后,hashset
将包含abc
def
ghi
jkl
mno
p
但问题是如果输入String很大,那么这个循环需要相当长的时间才能完成。有什么方法可以用来加速这个过程吗?
答案 0 :(得分:4)
作为一个选项,您可以用以下代码替换所有代码:
private void divideHash(String str) {
hashSet.addAll(Arrays.asList(str.split("(?<=\\G...)")));
}
哪个表现不错。
这是一些测试代码:
String str = "abcdefghijklmnop";
hashSet.addAll(Arrays.asList(str.split("(?<=\\G...)")));
System.out.println(hashSet);
输出:
[jkl, abc, ghi, def, mno, p]
答案 1 :(得分:2)
除非你告诉我们什么是显着的大量&#34;否则我们无法告诉你什么。是的,预计的时间是多久。建议您启动一个分析器来查找逻辑占用最多的时间。
我可以通过简要阅读您的代码给出一些建议:
如果结果集很大,当你的HashSet调整大小时,它将涉及大量调整大小和重新散列。建议您先分配所需的大小。例如
HashSet hashSet = new HashSet<String>(input.size() / 3 + 1, 1.0);
这将为您节省大量时间进行不必要的重组
切勿使用异常来控制程序流程。
为什么不简单地做:
int i = 0;
for (int i = 0; i < input.size(); i += 3) {
if (i + 3 > input.size()) {
// substring from i to end
} else {
// subtring from i to i+3
}
}