如何提高下面代码的性能,请提供任何提示以提高代码性能是否正确使用CopyOnWriteList。是否有任何机会下面的代码可能导致内存泄漏。
代码:
public static List<TestVO> description(final TestVO desc) {
List<TestVO> descList = new CopyOnWriteArrayList<TestVO>();
final StringBuilder builder = new StringBuilder();
String add = "";
TestVO desc =null;
for (int i = 0; i < 2; i++) {
desc = new TestVO();
for (String key : audit.getLog().keySet()) {
if (!key.equals("hello")) {
builder.append(key + "=" + audit.getLog().get(key)
+ add);
add = ", ";
audit.getLog().remove(key);
} else {
desc.setDesc(key + " = "
+ audit.getLog().get(key));
descList.add(desc);
audit.getLog().remove(key);
break;
}
}
}
desc.setDesc("Checks : " + builder.toString());
descList.add(desc);
return descList;
}
从主要方法调用:
TestVO a1=new TestVO();
a1.getLog().put("1", new BigDecimal(12));
a1.getLog().put("2", new BigDecimal(22));
a1.getLog().put("3", new BigDecimal(32));
a1.getLog().put("4", new BigDecimal(42));
a1.getLog().put("Hello", new BigDecimal(90));
description(a1);
TestVO有2个方法,一个是log,它的类型是HashMap,另一个是desc,它的类型是字符串。
答案 0 :(得分:1)
失去看似毫无用处的第一个循环。
按照惯例使用StringBuilder
:
builder.append(key + "=" + audit.getLog().get(key) + add);
应该是:
builder.append(key).append("=").append(audit.getLog().get(key)).append(add);
您真的需要一个descList作为List
而不是Set
吗?
无论如何你不需要CopyOnWriteArrayList
。或者至少我们不知道你是否需要这个代码。
目前还不清楚它是做什么的,它看起来像一个制作和设计的例子。是一个吗?
您的代码似乎可以同时制作多个内容。也许它对性能有好处,但也许这也给它一个非常奇怪的设计。
您更改add
变量的方式看起来很奇怪,看起来您最好建立一个集合,然后生成所需的字符串。
auditDesc
未声明,因此您可能没有向我们提供正确的代码。
你说 的任何调用(发现它,因为它在外面是不可见的代码块。) calling from main method
,但是我们看不到对description()
我们不知道它应该做什么,所以在你提供更完整的代码示例之前我无法提供更多帮助。