【问题标题】:Faster way to specify character array filling?指定字符数组填充的更快方法?
【发布时间】:2014-08-08 16:16:24
【问题描述】:
import java.util.Arrays;


public class ArraySpecification {
    public static void main(String args[]) {
        char[] correctLetters = {'a','b','c','d','e'};
        Arrays.fill(correctLetters, 0, 1, 'z');
        Arrays.fill(correctLetters, 2, 3, 'z');
        Arrays.fill(correctLetters, 4, 5, 'z');
        System.out.println(correctLetters);
    }
}

我只是想问一下,有没有什么方法可以更快更高效地完成这项工作?

【问题讨论】:

  • 这看起来像是一个微优化。在您证明它存在使用分析器证明的性能问题之前,您不应该担心它。
  • 你想让correctLetters打印什么?
  • correctLetters[0] =correctLetters[2] =correctLetters[4] ='z'?

标签: java arrays char


【解决方案1】:

好吧,除非您详细说明在特定索引处包含特定字母(例如 'z')所需的逻辑,否则无话可说。

为什么要打扰 Arrays.fill 呢?只需根据需要初始化数组即可:)!

char[] correctLetters = {'z','b','z','d','z'};

【讨论】:

  • 我想填满它们。开头的字母就在那里。
【解决方案2】:

是的,除了支付调用静态方法的成本/开销之外,您可以使用数组索引直接更改字符,这保证O(1) speed

样本:

        char[] correctLetters = {'a','b','c','d','e'};
        correctLetters[0] = 'z';
        correctLetters[2] = 'z';
        correctLetters[4] = 'z';

【讨论】:

  • 优化(很少)不是编写这样的代码的原因——这比记住Arrays.fill 的工作原理以及为什么它只会一次完成一个索引。
【解决方案3】:

你可以通过这个循环获得相同的结果,我认为这更简单:

for (int i = 0; i < correctLetters.length; i += 2) {
    correctLetters[i] = 'z';
}

【讨论】:

    猜你喜欢
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 1970-01-01
    • 2013-11-18
    • 2017-02-20
    • 1970-01-01
    • 2011-02-28
    相关资源
    最近更新 更多