2013-04-20 89 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); 
      ... 
     } 
    } 
}