दिलचस्प पोस्ट
किसी दिए गए पूर्णांक के सभी सटीक divisors को खोजने के लिए एल्गोरिथ्म स्पार्क: सिंगल-कुंजी RDD के साथ 2-ट्यूपल-कुंजी RDD में शामिल होने के लिए सबसे अच्छी रणनीति क्या है? दिनांक निर्माता IE में एनएएन देता है, लेकिन फ़ायरफ़ॉक्स और क्रोम में काम करता है जावास्क्रिप्ट के माध्यम से छवि फ़ाइल आकार + आयाम निर्धारित करना? मिलान करने वाले रंगों के लिए सर्वश्रेष्ठ एल्गोरिथ्म मैं रैंड () के साथ यादृच्छिक संख्याओं का एक ही क्रम क्यों प्राप्त करता हूं? ककड़ी का उपयोग करते हुए असफल परिदृश्यों को फिर से चलाने के लिए? एएससीआईआई को यूटीएफ -8 एन्कोडिंग में कनवर्ट करें फाइनल बनाम डिस्पोज़ करें पीडीओ तैयार बयान से कच्चे एसक्यूएल क्वेरी स्ट्रिंग प्राप्त करना पायथन में एक्सेल सीएसवी फ़ाइल में स्ट्रिंग्स की सूची लेखन मैं जावा में जावास्क्रिप्ट का उपयोग कैसे कर सकता हूं? डिक् तत्वों को कैसे जमा करें कैसे पता कैसे एक सरणी में जावास्क्रिप्ट / jQuery में एक विशिष्ट स्ट्रिंग है? ASP.NET MVC में एक फाइल देखने / डाउनलोड करने के लिए रिटर्निंग

StringBuilder क्यों स्ट्रिंग है जब?

मैं पहली बार StringBuilder सामना करना पड़ा और हैरान था क्योंकि जावा में पहले से ही एक बहुत शक्तिशाली String क्लास है जो ऐडिंग की अनुमति देता है।

क्यों एक दूसरा String वर्ग?

StringBuilder बारे में मैं अधिक कहां से सीख सकता हूं?

Solutions Collecting From Web of "StringBuilder क्यों स्ट्रिंग है जब?"

String ऐडिंग की अनुमति नहीं देता है प्रत्येक पद्धति जिसे आप String पर आमंत्रित करते हैं वह एक नया ऑब्जेक्ट बनाता है और उसे वापस लाता है। ऐसा इसलिए है क्योंकि String अपरिवर्तनीय है – यह अपनी आंतरिक स्थिति को बदल नहीं सकता है

दूसरी ओर StringBuilder अस्थिर है जब आप append(..) कॉल करते हैं तो यह एक नया स्ट्रिंग ऑब्जेक्ट बनाने के बजाय, आंतरिक वर्ण सरणी को बदल देता है।

इस प्रकार यह अधिक कुशल है:

 StringBuilder sb = new StringBuilder(); for (int i = 0; i < 500; i ++) { sb.append(i); } 

बल्कि str += i बजाय, जो 500 नए स्ट्रिंग ऑब्जेक्ट्स बनाएंगे str += i

ध्यान दें कि उदाहरण में मैं एक लूप का उपयोग करता हूं। टिप्पणियों में हैलोियोस नोट्स के रूप में, कंपाइलर स्वचालित रूप से एक्सप्रेशन जैसे String d = a + b + c को कुछ पसंद करता है

 String d = new StringBuilder(a).append(b).append(c).toString(); 

यह भी ध्यान रखें कि StringBuffer के अलावा StringBuffer भी है अंतर यह है कि पूर्व में सिंक्रनाइज़ किए गए तरीके हैं। यदि आप इसे एक स्थानीय चर के रूप में उपयोग करते हैं, तो StringBuilder उपयोग करें। यदि ऐसा होता है, तो यह कई थ्रेड्स द्वारा एक्सेस करने के लिए संभव है, StringBuffer उपयोग करें (जो कि दुर्लभ है)

यहां क्यों एक ठोस उदाहरण है –

 int total = 50000; String s = ""; for (int i = 0; i < total; i++) { s += String.valueOf(i); } // 4828ms StringBuilder sb = new StringBuilder(); for (int i = 0; i < total; i++) { sb.append(String.valueOf(i)); } // 4ms 

जैसा कि आप देख सकते हैं कि प्रदर्शन में अंतर महत्वपूर्ण है।

StringBuilder अस्थिर है, जबकि स्ट्रिंग वर्ग अपरिवर्तनीय है।

 String s = "Hello"; s = s + "World"; 

ऊपर कोड दो ऑब्जेक्ट बनाएगा क्योंकि स्ट्रिंग अपरिवर्तनीय है

 StringBuilder sb = new StringBuilder("Hello"); sb.append("World"); 

उपरोक्त कोड केवल एक ऑब्जेक्ट बनाएगा क्योंकि स्ट्रिंगबिल्ल्डर अपरिवर्तनीय नहीं है

पाठ: जब भी स्ट्रिंग के मुकाबले स्ट्रिंग को सुधारने / अपडेट करने / जोड़ने की ज़रूरत होती है, स्ट्रिंगबिल्ल्डर के लिए कई बार स्ट्रिंग की तुलना में इसकी कुशलता के रूप में जाना जाता है।

StringBuilder के लिए है, ठीक है, स्ट्रिंग का निर्माण। विशेष रूप से, उन्हें बहुत निष्पादक तरीके से निर्माण करना। स्ट्रिंग क्लास बहुत सी चीज़ों के लिए अच्छा है, लेकिन यह वास्तव में बहुत ही भयानक प्रदर्शन है जब छोटे स्ट्रिंग पार्ट्स से बाहर एक नया स्ट्रिंग जोड़ते हैं क्योंकि प्रत्येक नए स्ट्रिंग एक पूरी तरह से नया, पुनः आवृत स्ट्रिंग है। (यह अपरिवर्तनीय है ) स्ट्रिंगबिल्ल्डर एक ही अनुक्रम को इन-प्लेस में रखता है और इसे ( अस्थिर ) संशोधित करता है।

दक्षता।

हर बार जब आप तार जोड़ते हैं, तो एक नई स्ट्रिंग बनाई जाएगी। उदाहरण के लिए:

 String out = "a" + "b" + "c"; 

यह एक नया, अस्थायी स्ट्रिंग बनाता है, "ए" में प्रतियां "एक" और "बी" की प्रतियां बनाता है फिर यह एक और नई, अस्थायी स्ट्रिंग बनाता है, "एबी" और "सी" की प्रतियां, "एबीसी" के परिणामस्वरूप यह परिणाम फिर out सौंपा गया out

नतीजा एक Schlemiel है ओ पेंटर एल्गोरिथ्म ओ (एन 2) (द्विघात) समय की जटिलता

स्ट्रिंगबिल्डर, दूसरी तरफ, आपको आवश्यकतानुसार आउटपुट स्ट्रिंग का आकार StringBuilder , स्ट्रिंग्स को इन-प्लेन में जोड़ने देता है।

StringBuilder वर्ग अस्थिर है और स्ट्रिंग के विपरीत, यह आपको अधिक स्ट्रिंग ऑब्जेक्ट बनाने की आवश्यकता के बिना स्ट्रिंग की सामग्री को संशोधित करने की अनुमति देता है, जो कि जब आप स्ट्रिंग को भारी रूप से संशोधित करते हैं तो एक प्रदर्शन लाभ हो सकता है। स्ट्रिंगबफ़र नामक स्ट्रिंगबिलडर के लिए एक समकक्ष भी है जो कि सिंक्रनाइज़ है, इसलिए यह मल्टीथ्रेडेड वातावरण के लिए आदर्श है।

स्ट्रिंग के साथ सबसे बड़ी समस्या यह है कि आप इसके साथ किसी भी ऑपरेशन करेंगे, हमेशा एक नई ऑब्जेक्ट वापस करेंगे, कहते हैं:

 String s1 = "something"; String s2 = "else"; String s3 = s1 + s2; // this is creating a new object. 

StringBuilder अच्छा है जब आप बड़े तार के साथ काम कर रहे हैं यह आपको प्रदर्शन में सुधार करने में मदद करता है

यहाँ एक लेख है जो मैंने पाया है कि उपयोगी था।

एक त्वरित Google खोज आपकी मदद कर सकता था अब आप 7 अलग-अलग लोगों को आपके लिए एक Google खोज करने के लिए किराए पर लिया है। 🙂

सटीक होने के लिए, स्ट्रिंगबिल्ल्डर जोड़ते हुए स्ट्रिंग की ओ ओ (एन ^ 2) जोड़ते समय सभी स्ट्रिंग्स जोड़ना हे (एन) है। स्रोत कोड की जांच करना, यह आंतरिक रूप से अक्षरों के अस्थिर सरणी को रखने के द्वारा प्राप्त किया जाता है। स्ट्रिंगबइल्डर एएमआरएआर ओ (एन ^ 2) प्रदर्शन को प्राप्त करने के लिए सरणी लंबाई अनुलिपि तकनीक का उपयोग करता है, संभावित स्मृति को दोगुना करने की लागत पर। आप इसे सुलझाने के लिए अंत में ट्रिम-टॉइस को कॉल कर सकते हैं, लेकिन आमतौर पर स्ट्रिंगबल्ल्डर ऑब्जेक्ट्स केवल अस्थायी रूप से उपयोग किए जाते हैं। आप अंतिम स्ट्रिंग आकार पर एक अच्छी शुरुआत अनुमान प्रदान करके प्रदर्शन को और सुधार कर सकते हैं।

जावा में स्ट्रिंग, स्ट्रिंगबफ़र और स्टिंगबिल्डर हैं:

  • स्ट्रिंग: इसके अपरिवर्तनीय

  • स्ट्रिंगबफ़र: इसका परिवर्तन योग्य और धागा

  • स्ट्रिंगबिल्डर: इसका अनुक्रमिक लेकिन नहीं थ्रेड सुरक्षित, जावा 1.5 में पेश किया गया

स्ट्रिंग उदा:

 public class T1 { public static void main(String[] args){ String s = "Hello"; for (int i=0;i<10;i++) { s = s+"a"; System.out.println(s); } } } 

}

आउटपुट: सिर्फ 1 स्ट्रिंग के बजाय 10 विभिन्न स्ट्रिंग्स बनाई जाएंगी।

 Helloa Helloaa Helloaaa Helloaaaa Helloaaaaa Helloaaaaaa Helloaaaaaaa Helloaaaaaaaa Helloaaaaaaaaa Helloaaaaaaaaaa 

स्ट्रिंगबिइल्डर उदा: केवल 1 स्ट्रिंगबिलल्डर ऑब्जेक्ट बनाया जाएगा।

 public class T1 { public static void main(String[] args){ StringBuilder s = new StringBuilder("Hello"); for (int i=0;i<10;i++) { s.append("a"); System.out.println(s); } } } 
 int wiek = (int)roznica.TotalDays; public double GetRandomNumber(double minimum, double maximum) { Random random = new Random(); return random.NextDouble() * (maximum - minimum) + minimum; } StringBuilder sb = new StringBuilder(); sb.Append(producent + " " + kolor + " " + dataWaznosci.Date + " "); sb.Append(String.Format(" {0:0.00} zł", ObliczCene())); return sb.ToString(); using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace kolos_grD { internal class CenaMinimalnaException:Exception { public CenaMinimalnaException(string exc) : base(exc) { } } } using System.Runtime.Serialization.Formatters.Binary; using System.IO; public void Zapisz(string nazwa) { BinaryFormatter bf = new BinaryFormatter(); FileStream fs = new FileStream(nazwa + ".bin", FileMode.Create); bf.Serialize(fs, this); fs.Close(); } public static Bank Odczytaj(string nazwa) { BinaryFormatter bf = new BinaryFormatter(); FileStream fs = new FileStream(nazwa + ".bin", FileMode.Open); Bank nowy = (Bank) bf.Deserialize(fs); Konto.current_numer_konta = nowy.lista_kont.Last().numer_konta; fs.Close(); return nowy; } public void Sortuj() { List<Konto> pom = lista_kont.ToList(); pom.Sort(); LinkedList<Konto> nowa_lista = new LinkedList<Konto>(pom); lista_kont = nowa_lista; } public int CompareTo(Farba other) { return -this.ObliczCene().CompareTo(other.ObliczCene()); }