java - 我如何优化此代码以使其看起来性能更高?

标签 java

我有这个 Java 代码,它将用户的年龄分为 8 组:

private int[] A0, A1, A2, A3, A4, A5, A6, A7, A8;

    public Grouping() {
        super();

        for (int i = 5; i < 10; i++)
            A0[i] = i;

        for (int i = 10; i < 20; i++)
            A1[i] = i;

        for (int i = 20; i < 30; i++)
            A2[i] = i;

        for (int i = 30; i < 40; i++)
            A3[i] = i;

        for (int i = 40; i < 50; i++)
            A4[i] = i;

        for (int i = 50; i < 60; i++)
            A5[i] = i;

        for (int i = 60; i < 70; i++)
            A6[i] = i;

        for (int i = 70; i < 80; i++)
            A7[i] = i;

        for (int i = 10; i < 20; i++)
            A8[i] = i;

    }

现在我想优化这段代码。有什么想法吗?

最佳答案

You've said你想要它“更短”。这是一个较短的版本,除了我不知道你想用A8做什么,这对A1来说是多余的,所以已经离开关闭:

private int[][] groups; // I assume you initialize `A0` and so on somewhere you haven't shown; initialize this there

public Grouping() {
    int i, groupIndex, group;

    super();

    groupIndex = 0;
    group = groups[0];
    for (i = 5; i < 80; ++i) {
        if (i % 10 == 0) {
            ++groupIndex;
            group = groups[groupIndex];
        }
        group[i] = i;
    }
}

请注意,这仍然是相当奇怪的代码,因为它执行原始代码的操作,并将数组中的各种条目保留为其默认值 (0) 。例如,在您的代码中,A0 的索引 04 永远不会被分配,groups[0 也是如此]04 也是如此。 (后面的差距更大。)

不过,您的标题表明您希望它更加“高效”。 "performant"!= "shorter"您的代码可能执行很好,可能比我上面的代码好得多,因为它不需要 % 操作和 if 在循环内。

或者这是一个实现 Seelenvirtuose's suggestion 的版本:

private int[][] groups; // I assume you initialize `A0` and so on somewhere you haven't shown; initialize this there

public Grouping() {
    int i;

    super();

    for (i = 5; i < 80; ++i) {
        groups[i / 10][i] = i;
    }
}

...之所以有效,是因为 i/10 位是整数除法。

关于java - 我如何优化此代码以使其看起来性能更高?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30680721/

相关文章:

java - 使用 (Spring) ThreadPoolTask​​Executor 的多线程应用程序

java - Guice 可以初始化 bean 吗?

java - 在没有成员变量的情况下通过实现创建抽象类有什么意义?

java - Java 常量池的目的是什么?

java - TCP Socket 交换 kryo 序列化对象

java - 使用 java 手动运行命令(使用 cmd.exe)

java - UnmarshalException 和 ClassNotFoundException : what am I doing wrong?

Java - 读取 BZ2 文件并即时解压缩/解析

java - 将 csv 文件读入数组

java - Spring Boot 应用程序未启动