簡體   English   中英

在Java中附加字符串與附加字符

[英]Appending Strings vs appending chars in Java

我正在嘗試解決速度至關重要的算法任務。 在算法中,我在圖形中使用DFS搜索,並且在每個步驟中,我都添加了一個char和一個String。 我不確定這是否是我算法的瓶頸(可能不是),但是我很好奇這是最快,最有效的方法。

此刻,我使用這個:

transPred.symbol + word

我認為可能有比“ +”運算符更好的替代方法,但是大多數String方法只能與其他Strings一起使用(將char轉換為String並使用其中之一會有所作為嗎?)。

感謝您的回答。

編輯:

for (Transition transPred : state.transtitionsPred) {
            walk(someParameters, transPred.symbol + word);
        }

transPred.symbol是一個字符, word是一個字符串

一個非常普遍的問題/關注。

請記住,java中的每個String都是不可變的。 因此,如果您修改字符串,它實際上會創建一個新對象。 這樣,您在上面進行的每個串聯操作都會產生一個新對象。 這不是很好,因為它只是在某些時候創建必須收集的垃圾。

如果您的圖形太大,則可能是在遍歷邏輯期間-可能會減慢算法的速度。

為了避免為每個串聯創建新的String,請使用StringBuilder 您可以在循環外聲明一個,然后在每個字符后附加StringBuilder.append(char) 這不會為每個append()操作創建一個新的對象。

循環后,您可以使用StringBuilder.toString() ,這創建一個新對象(字符串),但在整個循環中僅是一個對象。

由於您在每次迭代中都在字符串中替換了一個char,所以我認為沒有什么比簡單的+ append操作更快的了。 如前所述,字符串是不可變的,因此在向其添加字符時,將獲得一個新的String對象,但是在您的情況下,這似乎是不可避免的,因為每次迭代都需要一個新的字符串。

如果您確實要優化此部分,請考慮使用可變變量,例如字符數組。 這樣,您就可以替換第一個字符,而無需創建過多的對象。

另外,當您說這可能不是瓶頸時,我認為您是對的。 並記住,過早的優化是萬惡之源 。(不要諷刺,良好優化的最流行示例是避免過多的字符串連接)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM