फिर मुझसे पूछा गया कि यह कार्यक्रम कितने तार उत्पन्न करेगा, यह मानते हुए कि कचरा संग्रहण नहीं होता है। N = 3 के लिए मेरे विचार थे (7)
स्ट्रिंग्स 1 ( ""
) और 2 ( "a"
) कार्यक्रम में स्थिरांक हैं, इन्हें चीजों के हिस्से के रूप में नहीं बनाया जाता है, बल्कि 'इंटर्न' किया जाता है क्योंकि वे स्थिरांक हैं जिनके बारे में संकलक को पता है। विकिपीडिया पर स्ट्रिंग इंटर्निंग में इसके बारे में और पढ़ें ।
यह भी गिनती से 5 और 7 तार निकालता है क्योंकि वे "a"
स्ट्रिंग # 2 के समान हैं । इससे # 3, # 4, और # 6 तार निकलते हैं। उत्तर है "3 कोड आपके कोड का उपयोग करके n = 3 के लिए बनाए गए हैं।"
N 2 की गिनती स्पष्ट रूप से गलत है क्योंकि n = 3 पर, यह 9 होगा और यहां तक कि आपके सबसे खराब मामले के उत्तर से भी, यह केवल 7. था। यदि आपका गैर-आंतरिक तार सही था, तो उत्तर 2n + 1 होना चाहिए था।
तो, सवाल यह है कि आपको यह कैसे करना चाहिए ?
चूँकि स्ट्रिंग अपरिवर्तनीय है , आप एक परिवर्तनशील चीज़ चाहते हैं - कुछ ऐसी चीज़ जो आप नई वस्तुओं को बनाए बिना बदल सकते हैं। वह है स्ट्रिंगबर्ल ।
सबसे पहले गौर करने वाली बात यह है कि निर्माणकर्ता। इस मामले में हम जानते हैं कि स्ट्रिंग कितनी लंबी होगी, और एक कंस्ट्रक्टर है StringBuilder(int capacity)
जिसका मतलब है कि हम जितना आवश्यक है उतना ही आवंटित करते हैं।
अगला, "a"
एक स्ट्रिंग होने की आवश्यकता नहीं है , बल्कि यह एक चरित्र हो सकता है 'a'
। यह कुछ मामूली प्रदर्शन जब बुला बढ़ाने है append(String)
बनाम append(char)
- साथ append(String)
, विधि का पता लगाने के कितनी देर स्ट्रिंग है और उस पर कुछ काम करने की जरूरत है। दूसरी ओर, char
हमेशा एक वर्ण लंबा होता है।
कोड अंतर StringBuilder.append (स्ट्रिंग) बनाम StringBuilder.append (char) में देखे जा सकते हैं । यह कुछ के साथ बहुत चिंतित नहीं है, लेकिन अगर आप नियोक्ता को प्रभावित करने की कोशिश कर रहे हैं तो सर्वोत्तम संभव प्रथाओं का उपयोग करना सबसे अच्छा है।
तो, जब आप इसे एक साथ रखते हैं तो यह कैसा दिखता है?
public String foo(int n) {
StringBuilder sb = new StringBuilder(n);
for (int i = 0; i < n; i++) {
sb.append('a');
}
return sb.toString();
}
एक StringBuilder और एक String बनाया गया है। कोई अतिरिक्त तार इंटर्न करने की आवश्यकता नहीं है।
ग्रहण में कुछ अन्य सरल कार्यक्रम लिखें। Pmd स्थापित करें और इसे आपके द्वारा लिखे गए कोड पर चलाएँ। ध्यान दें कि यह किस बारे में शिकायत करता है और उन चीजों को ठीक करता है। इसके साथ एक पाश में + एक स्ट्रिंग के संशोधन पाया होता है, और यदि आप StringBuilder है कि बदल गया है, यह है | शायद आरंभिक क्षमता पाया है, लेकिन यह निश्चित रूप से के बीच अंतर को पकड़ने होगा .append("a")
और.append('a')