Java char数组复制产生奇怪的结果

时间:2013-11-13 08:35:17

标签: java arrays copy char

我想优化我的代码,所以不是为字母表中的每次迭代复制我的整个char数组,而是选择事先进行复制,然后我只是将chars添加到副本中。

例如:

复制“lord”(i = 0)

修改第一个字母(aord,bord,cord& c)

复制“领主”(i = 1)

修改第二个字母(lard,lbrd,lcrd& c)

和C

    for (int i = 0; i < wordLength; i++) {
        Word moddedWord = new Word(Arrays.copyOf(temp.word.content, wordLength));
        for (int c = 0; c < alphabetLength; c++) {
            if (alphabet[c] != temp.word.content[i]) {
                // Word moddedWord = new Word(Arrays.copyOf(temp.word.content, wordLength));
                moddedWord.content[i] = alphabet[c];
                Word res = WordList.Contains(moddedWord);
                if (res != null && WordList.MarkAsUsedIfUnused(res)) {
                    WordRec wr = new WordRec(res, temp);
                    q.Put(wr);
                }
            }
        }
    }

然而,当我做这个小改动时,我的程序不起作用,当我习惯于使用注释行进行复制时。我已经调试了好几个小时了,我可以找到 nothing 来改变这个,我尝试了各种形式的复制,我尝试将“原始”单词存储为字符串,然后当我需要复制它时,将它转换为char数组,似乎没有任何效果。哦顺便说一句,“Word”只是char []的包装器(Word.content是一个char []字段)。

1 个答案:

答案 0 :(得分:1)

如果要存储单词的每个修改,则无法避免复制。这里:

new WordRec(res, temp);

您根据单词的 mutable 实例创建一个单词记录,然后继续更改该单个实例。您需要在此构造函数中复制temp。所以你所取得的最好成就是稍后复制,可能会因为它发生的“ifology”而稍微减少。

现在,如果您真的想提高效果,请将WordList重新设为WordSet,并使用Contains方法查找O(1)。

最后一点:请尊重Java命名约定。方法以小写字母开头。