通过选择其他数据结构进行代码优化

时间:2013-04-20 22:28:47

标签: java string optimization data-structures char

我有一段需要优化的代码。

 for (int i = 0; i < wordLength; i++) {
   for (int c = 0; c < alphabetLength; c++) {
     if (alphabet[c] != x.word.charAt(i)) {
        String res = WordList.Contains(x.word.substring(0,i) +
                     alphabet[c] +
                     x.word.substring(i+1));
      if (res != null && WordList.MarkAsUsedIfUnused(res)) {
        WordRec wr = new WordRec(res, x);
        if (IsGoal(res)) return wr;
        q.Put(wr);
      }
    }
  }

单词由字符串表示。问题是第4-6行的代码创建了许多字符串对象,因为字符串是不可变的。

如果我想获得更快的代码,我应该将哪个数据结构更改为单词表示?我试图将其更改为char [],但是我遇到以下代码的问题:

x.word.substring(0,i)

如何从char []获取子数组?以及如何在第4.6行连接char和char []?

我可以使用其他合适且可变的数据结构吗?我想到了stringbuffer,但是在stringbuffers上找不到合适的操作。

在给定特定单词的情况下,此函数会生成所有不同于一个字符的单词。 WordRec只是一个带有表示单词的字符串的类,以及指向该单词“父”的指针。

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用此方法减少对象数量:

StringBuilder tmp = new StringBuilder(wordLength);
tmp.append(x.word);
for (int i=...) {
    for (int c=...) {
        if (...) {
           char old = tmp.charAt(i);
           tmp.setCharAt(i, alphabet[c]);
           String res = tmp.toString();
           tmp.setCharAt(i, old);
           ...
        }
    }
}