2013-04-20 34 views
0

我有一段需要优化的代码。通过选择另一个数据结构来优化代码

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

它有什么作用? – Ryan 2013-04-20 22:30:39

+0

什么是'WordList'类型和什么是'WordRec'?另外,'IsGoal'是一种方法?如果是,那么请正确使用caseCamel来命名它。 – 2013-04-20 22:30:55

回答

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); 
      ... 
     } 
    } 
}