C# String.Join 与 StringBuilder 对比,谁更快 Performance Comparison
String.Join 文档 StringBuilder 文档
这两天刷 Leedcode 做到一道 String 的题时突然想到这俩对比的问题,于是查了一下资料并简单对比了一下。
首先对于 151. Reverse Words in a String 这道题而言,对比提交结果如下:
明显 StringBuilder 更快,并且更省内存。
// Join public static string ReverseWords(string s) { var sArr = s.Split(' '); var joinStr =""; for (var i = sArr.Count() - 1; i >= 0; i--) { if (sArr[i].ToString() != "") { joinStr = string.Join(" ", joinStr, sArr[i]); } } return joinStr.Trim(); } // StringBuilder public string ReverseWords2(string s) { var sArr = s.Split(' '); var sb = new StringBuilder(); for (var i = sArr.Count() - 1; i >= 0; i--) { if (sArr[i].ToString() != "") { sb.Append(sArr[i]); if (i != 0) sb.Append(" "); } } return sb.ToString().Trim(); }
那么什么情况下Join会更快呢?
答: 在你已经有一个字符串数组,并且要以分隔符合并的情况下, Join 是最快的方法。 也就是 : Join(String, String[]) 的方法。
当然了,无论这两种方法用哪一种,肯定都是优于 "string1" + " " + "string2" 这样直接又粗暴的方式的。
具体证明和更多讨论请参考: https://stackoverflow.com/questions/585860/string-join-vs-stringbuilder-which-is-faster