बस पिछली टिप्पणी बढ़ाना:
स्रोत को देख से, delete
() हमेशा System.arraycopy
() कहता है, लेकिन तर्क हैं अगर (0, गिनती), यह की लंबाई के साथ arraycopy
() कॉल करेंगे शून्य, जो संभवतः कोई प्रभाव नहीं होगा। आईएमएचओ, यह अनुकूलित किया जाना चाहिए क्योंकि मैं शर्त लगाता हूं कि यह सबसे आम मामला है, लेकिन कोई फर्क नहीं पड़ता।
setLength
() के साथ, दूसरे हाथ पर, कॉल ensureCapacityInternal
() (एक और बहुत ही सामान्य मामला है कि बाहर IMHO अनुकूलित किया जाना चाहिए था) और फिर करने के लिए एक कॉल के माध्यम से यदि आवश्यक हो तो StringBuilder की क्षमता में वृद्धि होगी delete
के रूप में लंबाई ट्रंकेटस() किया होता।
आखिरकार, दोनों विधियां केवल count
को शून्य पर सेट अप करें।
न तो कॉल इस मामले में कोई भी पुनरावृत्ति करता है। दोनों एक अनावश्यक समारोह कॉल करते हैं। हालांकि सुनिश्चित करें कि क्षमता इंटरनेशनल() एक बहुत ही सरल निजी विधि है, जो कंपाइलर को लगभग अस्तित्व से अनुकूलित करने के लिए आमंत्रित करती है, इसलिए यह संभावना है कि setLength
() थोड़ा अधिक कुशल है।
मैं बहुत संदेह है कि StringBuilder का एक नया उदाहरण बनाने कभी बस शून्य करने के लिए count
सेटिंग के रूप में के रूप में कुशल हो सकता है, लेकिन मुझे लगता है कि संकलक पैटर्न शामिल समझते हैं और करने के लिए बार-बार कॉल में दोहराया instantiations कन्वर्ट कर सकती है setLength
(0)। लेकिन सबसे अच्छा, यह एक धो होगा। और आप मामले को पहचानने के लिए संकलक के आधार पर हैं।
कार्यकारी सारांश: सेटलेथेंथ (0) सबसे कुशल है। अधिकतम दक्षता के लिए, जब आप इसे बनाते हैं तो स्ट्रिंगबिल्डर में बफर स्पेस को पूर्व-आवंटित करें।
स्रोत
2012-07-06 01:43:49
क्या आपने इसे प्रोफाइलर में परीक्षण किया है? परिणाम क्या थे? –
यह भी देखें http://codereview.stackexchange.com/questions/7575/reusing-stringbuilder-or-creating-a-new-one – Flow