आप लूप के बाद जावा में स्ट्रिंग बफर को कैसे साफ़ करते हैं ताकि अगले पुनरावृत्ति एक स्पष्ट स्ट्रिंग बफर का उपयोग करे?
आप लूप के बाद जावा में स्ट्रिंग बफर को कैसे साफ़ करते हैं ताकि अगले पुनरावृत्ति एक स्पष्ट स्ट्रिंग बफर का उपयोग करे?
जवाबों:
एक विकल्प इस प्रकार है:
StringBuffer sb = new StringBuffer();
for (int n = 0; n < 10; n++) {
sb.append("a");
// This will clear the buffer
sb.delete(0, sb.length());
}
एक अन्य विकल्प (बिट क्लीनर) सेटलग्रेन (इंट लेन) का उपयोग करता है :
sb.setLength(0);
अधिक जानकारी के लिए Javadoc देखें :
पुन: उपयोग करने का सबसे आसान तरीका StringBuffer
विधि का उपयोग करना हैsetLength()
public void setLength(int newLength)
आपके पास मामला हो सकता है
StringBuffer sb = new StringBuffer("HelloWorld");
// after many iterations and manipulations
sb.setLength(0);
// reuse sb
setLength
बजाय पढ़ना चाहिए setlength
।
आपके पास दो विकल्प हैं:
या तो उपयोग करें:
sb.setLength(0); // It will just discard the previous data, which will be garbage collected later.
या उपयोग करें:
sb.delete(0, sb.length()); // A bit slower as it is used to delete sub sequence.
लूप के भीतर वस्तुओं की घोषणा करने से बचें StringBuffer
या StringBuilder
फिर यह प्रत्येक पुनरावृत्ति के साथ नई वस्तुओं का निर्माण करेगा। वस्तुओं के निर्माण के लिए सिस्टम संसाधन, स्थान की आवश्यकता होती है और इसमें समय भी लगता है। इसलिए लंबे समय के लिए, यदि संभव हो तो उन्हें लूप के भीतर घोषित करने से बचें।
buf.delete(0, buf.length());
मैं प्रत्येक पुनरावृत्ति के लिए एक नया StringBuffer
(या इससे भी बेहतर StringBuilder
) बनाने का सुझाव देता हूं । प्रदर्शन अंतर वास्तव में नगण्य है, लेकिन आपका कोड छोटा और सरल होगा।
public void clear(StringBuilder s) {
s.setLength(0);
}
उपयोग:
StringBuilder v = new StringBuilder();
clear(v);
पठनीयता के लिए, मुझे लगता है कि यह सबसे अच्छा समाधान है।
वहां पहले से ही अच्छा जवाब। बस स्ट्रिंग बेंचर के लिए एक बेंचमार्क परिणाम जोड़ें और स्ट्रिंगबल्ड प्रदर्शन अंतर लूप में नए उदाहरण का उपयोग करें या लूप में सेटलिफ्ट (0) का उपयोग करें।
सारांश है: एक बड़े लूप में
बहुत ही सरल बेंचमार्क (मैंने कोड को मैन्युअल रूप से बदल दिया है और अलग-अलग परीक्षण करता है):
public class StringBuilderSpeed {
public static final char ch[] = new char[]{'a','b','c','d','e','f','g','h','i'};
public static void main(String a[]){
int loopTime = 99999999;
long startTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < loopTime; i++){
for(char c : ch){
sb.append(c);
}
sb.setLength(0);
}
long endTime = System.currentTimeMillis();
System.out.println("Time cost: " + (endTime - startTime));
}
}
लूप में न्यू स्ट्रिंगबर्स्ट उदाहरण: समय लागत: 3693, 3862, 3624, 3742
StringBuilder सेट गति: समय लागत: 3465, 3421, 3557, 3408
लूप में नया स्ट्रिंगर उदाहरण: समय लागत: 8327, 8324, 8284
स्ट्रिंगर बफ़र सेट लैंथ टाइम लागत: 22878, 23017, 22894
फिर से StringBuilder setLength सुनिश्चित करने के लिए नहीं कि मेरा लैपटॉप StringBuffer setLength के लिए इतने लंबे समय तक उपयोग करने के लिए कुछ मुद्दा मिला: समय लागत: 3448
StringBuffer sb = new SringBuffer();
// do something wiht it
sb = new StringBuffer();
मुझे लगता है कि यह कोड तेज है।