-3

如何提高以下代码的性能,您能否提供任何提示以提高代码性能是否正确使用 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;

}

从 main 方法调用:

              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 有两种方法,一种是 log,它的类型是 HashMap,另一种是 desc,它的类型是 string。

4

1 回答 1

1

该特定代码的性能提示

  • 失去看似无用的第一个循环。

  • 使用StringBuilder它的本意:

    builder.append(key + "=" + audit.getLog().get(key) + add);
    

    真的应该是:

    builder.append(key).append("=").append(audit.getLog().get(key)).append(add);
    
  • 你真的需要 descList 作为 aList而不是 aSet吗?

  • CopyOnWriteArrayList反正你不需要这里。或者至少我们不知道您是否需要此代码中的一个。

该特定代码的一般提示

  • 目前还不清楚这是做什么的,它看起来像是一个虚构的例子。是一个吗?

  • 您的代码似乎一次制作了多项内容。也许它对性能有好处,但也许这也给了它一个非常奇怪的设计。

  • 您更改add变量的方式似乎很奇怪,看起来您最好构建一个集合,然后生成您需要的字符串。

  • auditDesc未声明,因此您可能没有给我们正确的代码。

  • 你说calling from main method,但我们没有看到任何调用description() (找到它,不可见,因为它在代码块之外。)

  • 我们不知道它应该做什么,所以在您提供更完整的代码示例之前,我真的无法提供更多帮助。

于 2013-09-04T23:01:43.307 回答