我需要做很多下面的代碼程序對於字符串操作,字符串或座標緩衝區更快?
int index=temp.lastIndexOf("\\n== External links ==\\");
System.out.println(temp.substring(index))
INDEXOF,串,包含了那麼這些操作將在StringBuffer的或字符串更好?
如果是這樣,你爲什麼要詳細說明我?
我需要做很多下面的代碼程序對於字符串操作,字符串或座標緩衝區更快?
int index=temp.lastIndexOf("\\n== External links ==\\");
System.out.println(temp.substring(index))
INDEXOF,串,包含了那麼這些操作將在StringBuffer的或字符串更好?
如果是這樣,你爲什麼要詳細說明我?
StringBuilder上沒有contains
或StringBuffer。 indexOf和substring被委託給String本身。 StringBuffer和StringBuilder連接速度更快,但是查看字符串:使用String類本身
當需要執行大量字符串操作時,通過字符串建議使用StringBuffer或StringBuilder,因爲使用String會在「字符串常量池」中留下很多未引用的String對象。
此外StringBuilder優於StringBuffer(儘管它們具有完全相同的API)因爲它的方法不是線程安全的(即同步),因此它們執行得更快。
String.substring
不會創建新的字符串,只會索引到原始字符串中,從而避免了複製字符串內容的代價。因此,如果您只需要這樣做,那麼String
就足夠了(並且使用更簡單 - 尤其是因爲StringBuffer
/StringBuilder
沒有contains
方法)。
OTOH您絕對不應該使用StringBuffer
,因爲它是同步的,這會帶來性能損失 - 如果您使用的是Java5或更新版本,請考慮StringBuilder
。
最後,您唯一可以確定的方法是通過真實數據來測量您自己環境中的每個選項。
嘗試兩者並比較性能。我們不能說出這樣的代價是如何在您的代碼庫中發揮作用的。只有你可以明確地回答這個問題。 –
「很多」,如數百,數千,數百萬?什麼是典型的字符串長度? – assylias
從長遠來看,再次,根據您的代碼庫,我認爲使用String會更快。這種方法會消耗更多的內存,儘管由於String是JVM中專用內存區域的特定類。 – kyiu