2017-02-24 58 views
-2

我有地圖像下面對象的創建在Java運行時的方法,而不使用反射

<key1, ClassAobj> 
<key2, ClassBobj> 
<key3, ClassCobj> 
<key4, ClassDobj> 

在地圖對象的數量是未知的。我正在迭代地調用這些對象的方法。

for key in keyset { 
    stringbuilder.append(map.get(key).getData()) 
} 

但是在大規模情況下,此迭代和stringbuilder.append會導致性能問題,即需要時間。我想創建它創建了一個stribuilder像運行方法,

getdata() { 

    return (stringbuilder(map.get(key1).getdata() + map.get(key2).getdata() + map.get(key3).getdata() + ... + till all entries in map))  

} 

是不是正確的做法?請建議是否有更好的方法,如果有例子。

我已經嘗試過java反射,它比目前的迭代器版本慢得多,從而避免了它。

P.S.忽略將此視爲僞代碼的語法。

+2

你認爲在運行時創建一個完整的方法會比sringbuilder更快嗎? – zack6849

+1

我認爲字符串生成器的性能是潛在的增長字符數組。您應該在字符串構建器構造函數中提供預期的長度。 – Mordechai

+0

@MouseEvent我認爲你的評論,多一點解釋,值得回答。 –

回答

0

StringBuilder是迄今爲止執行字符串連接的最有效方法,因爲您知道發生了什麼。

在內部,構建器有一個固定的char數組,用於存儲每個追加處的附加值。陣列填滿後會發生什麼?與ArrayList類似,分配了一個新陣列arr.length * 2,並將值複製到新陣列。這個過程一直重複,只要需要。

根據JavaDoc的默認長度爲16.如果您知道結果字符串的大致長度,則更好的方法是在構造函數中提供該長度。這將減少之後的額外開銷。