java - example - stringbuilder شرح




لماذا StringBuilder عندما يكون هناك سلسلة؟ (7)

StringBuilder جيد عند التعامل مع سلاسل أكبر. يساعدك على تحسين الأداء.

هنا article وجدت أنه مفيد.

كان من الممكن أن يساعدك بحث Google السريع. الآن استأجرت 7 أشخاص مختلفين للقيام ببحث جوجل لك. :)

لقد صادفت StringBuilder لأول مرة للمرة الأولى وفوجئت منذ أن قامت Java بالفعل بفئة String قوية للغاية تسمح بالإلحاق.

لماذا الفصل الثاني في الصف؟

أين يمكنني معرفة المزيد عن StringBuilder ؟


StringBuilder هو ، لبناء ، سلاسل. على وجه التحديد ، بناء عليها بطريقة اداء للغاية. تعتبر فئة String جيدة للكثير من الأشياء ، ولكنها في الواقع تتمتع بأداء فظيع عندما تقوم بتجميع سلسلة جديدة من أجزاء السلسلة الصغيرة لأن كل سلسلة جديدة هي سلسلة جديدة تم إعادة تخصيصها. (إنها immutable ) يحتفظ StringBuilder بالتسلسل نفسه في المكان ويقوم بتعديله ( قابل للتغيير ).


على وجه الدقة ، StringBuilder إضافة كافة السلاسل هو O (N) أثناء إضافة String's هو O (N ^ 2). التحقق من شفرة المصدر ، يتم تحقيق ذلك داخليًا من خلال الاحتفاظ بمجموعة من الأحرف القابلة للتغيير. يستخدم StringBuilder تقنية تكرار طول الصفيف لتحقيق أداء O (N ^ 2) ، على حساب احتمال مضاعفة الذاكرة المطلوبة. يمكنك استدعاء trimToSize في النهاية لحل هذه المشكلة ، ولكن عادةً ما يتم استخدام كائنات StringBuilder مؤقتًا فقط. يمكنك تحسين الأداء بشكل أفضل من خلال توفير تخمين بدء جيد في حجم السلسلة النهائي.


فئة السلسلة غير قابلة للتغيير في حين أن StringBuilder قابلة للتغيير.

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

سينشئ كود اعلاه شيئين لأن السلسلة غير قابلة للتغيير

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

كود فوق سوف يخلق كائن واحد فقط لأن StringBuilder غير قابل للتغيير.

الدرس: كلما كانت هناك حاجة للتلاعب / التحديث / إلحاق سلسلة عدة مرات ، انتقل إلى StringBuilder باعتبارها فعالة مقارنة مع String.


لدى Java سلسلة و StringBuffer و StringBuilder:

  • السلسلة: غير قابل للتغيير

  • StringBuffer: Its Mutable و ThreadSafe

  • StringBuilder: Its Mutable لكن ليس ThreadSafe ، المقدمة في Java 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);
        }
    }
}

}

الإخراج: سيتم إنشاء 10 سلاسل مختلفة بدلاً من سلسلة واحدة فقط.

Helloa
Helloaa
Helloaaa
Helloaaaa
Helloaaaaa
Helloaaaaaa
Helloaaaaaaa
Helloaaaaaaaa 
Helloaaaaaaaaa 
Helloaaaaaaaaaa

على سبيل المثال StringBuilder: سيتم إنشاء كائن StringBuilder واحد فقط.

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);
        }
    }
}

نجاعة.

في كل مرة تقوم بتوصيل سلاسل ، سيتم إنشاء سلسلة جديدة. فمثلا:

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

يؤدي هذا إلى إنشاء سلسلة مؤقتة جديدة ، نسخ "a" و "b" إلى أن ينتج في "ab". ثم يقوم بإنشاء سلسلة مؤقتة وجديدة أخرى ، نسخ "ab" و "c" إلى ذلك ، ينتج في "abc". يتم تعيين هذه النتيجة out .

والنتيجة هي خوارزمية Schlemiel the Painter لدرجة تعقيد الزمن O (n²) (التربيعي).

StringBuilder ، من ناحية أخرى ، يتيح لك إلحاق سلاسل في نفس المكان ، وتغيير حجم سلسلة الإخراج حسب الضرورة.


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());
    }




stringbuilder