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

}

メインメソッドからの呼び出し:

              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 つのメソッドがあります。1 つは log で、そのタイプは HashMap で、もう 1 つは 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);
    
  • Listではなく aとして descList が本当に必要Setですか?

  • CopyOnWriteArrayListとにかくここは必要ありません。または、少なくとも、このコードから必要かどうかはわかりません。

その特定のコードに関する一般的なヒント

  • それが何をするのかは非常に不明です。これは、でっち上げで不自然な例のように見えます。一つですか?

  • あなたのコードは、一度に複数のものを作成しているようです。パフォーマンスには良いかもしれませんが、それはかなり奇妙なデザインにもなるかもしれません.

  • 変数を変更する方法addはかなり奇妙に思えます。コレクションを作成してから必要な文字列を生成する方がよいようです。

  • auditDescは宣言されていないため、正しいコードを提供していない可能性があります。

  • と言いますが、 calling from main methoddescription() (コード ブロックの外側にあったため、見つかりませんでした。)への呼び出しは表示されません。

  • 私たちはそれが何をするべきなのか見当もつかないので、あなたがより完全なコードサンプルを提供するまで、私は本当に助けになることはできません.

于 2013-09-04T23:01:43.307 に答える