برنامه نویسی

مدیریت رشته در جاوا: تغییرناپذیری رشته ها، «StringBuilder» در مقابل «StringBuffer»

Summarize this content to 400 words in Persian Lang در جاوا، رشته ها به دلیل تغییر ناپذیری، متفاوت از سایر اشیاء مدیریت می شوند. جاوا نیز فراهم می کند StringBuilder و StringBuffer کلاس هایی برای کار با دنباله های قابل تغییر کاراکترها، که انعطاف پذیری بیشتری برای دستکاری رشته ها ارائه می دهد.

1. تغییرناپذیری رشته ها

در جاوا، String کلاس است تغییرناپذیر، یعنی یک بار الف String شی ایجاد می شود، نمی توان آن را تغییر داد. هر گونه تغییر در یک رشته (مانند الحاق یا جایگزینی) منجر به ایجاد یک رشته جدید می شود String شی

ویژگی های کلیدی String Immutability:

ایمنی نخ: از آنجایی که رشته ها تغییر ناپذیر هستند، می توان آنها را به طور ایمن در چندین رشته بدون خطر تغییر توسط یک رشته در حالی که توسط رشته دیگر استفاده می شود به اشتراک گذاشت.

عملکرد: تغییرناپذیری رشته به بهینه سازی حافظه با فعال کردن رشته های داخلی کمک می کند، جایی که JVM می تواند همان رشته را در یک رشته ذخیره کرده و دوباره استفاده کند. استخر رشته ای.

امنیت: رشته های تغییرناپذیر برای استفاده در کدهای حساس به امنیت، مانند اتصالات پایگاه داده یا مسیرهای فایل ایمن هستند، زیرا پس از ایجاد نمی توان آنها را تغییر داد.

مثالی از تغییرناپذیری:

public class StringImmutability {
public static void main(String[] args) {
String str = “Hello”;
str = str.concat(“, World!”); // This creates a new String object
System.out.println(str); // Output: Hello, World!
}
}

در این مثال، اصل “Hello” رشته بدون تغییر باقی می ماند، و concat روش a ایجاد می کند رشته جدید “Hello, World!”.

2. رشته های قابل تغییر: StringBuilder و StringBuffer

برای اصلاح موثر رشته ها، جاوا فراهم می کند StringBuilder و StringBuffer. این کلاس‌ها توالی‌های قابل تغییر کاراکتر را امکان‌پذیر می‌سازند، و آنها را برای موقعیت‌هایی که نیاز به تغییرات مکرر رشته‌ها است، مناسب‌تر می‌سازد.

تفاوت های کلیدی بین StringBuilder و StringBuffer:

ویژگی
StringBuilder
StringBuffer

تغییرپذیری
قابل تغییر است
قابل تغییر است

ایمنی نخ
ایمن برای نخ نیست

ایمن با نخ (همگام)

عملکرد
سریعتر به دلیل عدم همگام سازی
کندتر به دلیل همگام سازی

استفاده از مورد
در زمینه های تک رشته ای ترجیح داده می شود
در زمینه های چند رشته ای ترجیح داده می شود

3. StringBuilder

StringBuilder یک کلاس قابل تغییر است که امکان تغییر رشته ها را بدون ایجاد اشیاء جدید فراهم می کند. سریعتر از StringBuffer چون هست هماهنگ نیست، به این معنی که ایمنی نخ را فراهم نمی کند.

نمونه ای از استفاده StringBuilder:

public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(“Hello”);
sb.append(“, World!”); // Modifying the existing object
System.out.println(sb.toString()); // Output: Hello, World!
}
}

در این مثال، StringBuilder شی به طور مستقیم با append()، بدون ایجاد یک شی جدید.
این باعث می شود StringBuilder بسیار کارآمدتر از String برای کارهایی که مستلزم تغییرات مکرر رشته هستند.

روش های رایج StringBuilder:

append(String s): رشته را به انتهای دنباله فعلی اضافه می کند.

insert(int offset, String s): رشته را در موقعیت مشخص شده قرار می دهد.

delete(int start, int end): کاراکترهای محدوده داده شده را حذف می کند.

reverse(): دنباله را برعکس می کند.

4. StringBuffer

StringBuffer مشابه است StringBuilder، اما هست هماهنگ شده، ساختن آن ایمن با نخ. این بدان معنی است که چندین رشته می توانند به طور ایمن به آن دسترسی داشته باشند، اما همگام سازی با هزینه عملکرد همراه است.

نمونه ای از استفاده StringBuffer:

public class StringBufferExample {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer(“Hello”);
sb.append(“, World!”); // Modifying the existing object
System.out.println(sb.toString()); // Output: Hello, World!
}
}

شبیه به StringBuilder، StringBuffer امکان تغییر مستقیم رشته را فراهم می کند. با این حال، به دلیل سربار همگام سازی کندتر است.

روش های رایج StringBuffer:

همان StringBuilder، با روش هایی مانند append()، insert()، delete()، و reverse()، اما بدون نخ.

5. مقایسه عملکرد: String در مقابل StringBuilder در مقابل StringBuffer

رشته (غیرقابل تغییر):

آهسته تر برای تغییرات مکرر زیرا هر تغییر یک شی جدید ایجاد می کند.
بهترین برای فقط خواندنی یا ثابت شده است عملیات رشته

StringBuilder (قابل تغییر، همگام نیست):

سریعتر برای الحاق رشته و اصلاح.
بهترین برای تک رشته ای برنامه های کاربردی یا زمانی که ایمنی رزوه نگران کننده نیست.

StringBuffer (قابل تغییر، همگام):

آهسته تر از StringBuilder به دلیل ایمنی نخ (همگام سازی).
بهترین برای چند رشته ای برنامه هایی که رشته ها توسط رشته های متعدد اصلاح می شوند.

6. سناریوهای مورد استفاده عملی

استفاده کنید String: برای عملیات رشته ساده یا زمانی که رشته ها اغلب تغییر نمی کنند.

مثال: اختصاص یک پیام ثابت، ثبت یک رشته ثابت.

استفاده کنید StringBuilder: برای تغییرات مکرر در زمینه تک رشته ای.

مثال: به هم پیوستن رشته ها در یک حلقه.

StringBuilder sb = new StringBuilder();
for (int i = 0; i < 5; i++) {
sb.append(“Iteration “).append(i).append(” “);
}
System.out.println(sb.toString());

استفاده کنید StringBuffer: در محیط های چند رشته ای که چندین رشته ممکن است رشته مشابهی را تغییر دهند.

مثال: اصلاح رشته های مشترک در یک سیستم ورود به سیستم چند رشته ای.

StringBuffer sb = new StringBuffer();
sb.append(“Thread-safe modifications”);

7. نتیجه گیری

رشته ها در جاوا هستند تغییرناپذیر به دلایل عملکرد، امنیت و ایمنی نخ.

StringBuilder بهترین انتخاب برای تغییرات مکرر در برنامه های تک رشته ای به دلیل سرعت آن است.

StringBuffer جایگزین ایمن برای نخ است StringBuilder و در محیط های چند رشته ای که نیاز به همگام سازی است استفاده می شود.

انتخاب کلاس مدیریت رشته مناسب بستگی به این دارد که آیا به تغییر ناپذیری، عملکرد یا ایمنی نخ نیاز دارید.

در اینجا چند برنامه کوچک وجود دارد که به شما کمک می کند تا درک خود را از آنها تازه کنید تغییرناپذیری رشته، StringBuilder، و StringBuffer در جاوا:

1. تغییرناپذیری رشته ها

این برنامه نشان می دهد که چگونه رشته ها تغییرناپذیر هستند و چگونه هر تغییری منجر به یک شی جدید می شود.

public class StringImmutabilityDemo {
public static void main(String[] args) {
String str1 = “Hello”;
String str2 = str1.concat(” World”);

System.out.println(“Original String: ” + str1); // Output: Hello
System.out.println(“Modified String: ” + str2); // Output: Hello World
}
}

در این مثال، str1 پس از الحاق اصلاح نمی شود. یک رشته جدید str2 ایجاد می شود.

2. با استفاده از StringBuilder برای الحاق کارآمد

این برنامه نحوه استفاده را نشان می دهد StringBuilder برای به هم پیوستن موثر رشته ها

public class StringBuilderDemo {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(“Hello”);

sb.append(” World”);
sb.append(“!”);

System.out.println(“Resulting String: ” + sb.toString()); // Output: Hello World!
}
}

همینطور StringBuilder شی چندین بار بدون ایجاد اشیاء جدید اصلاح می شود و برای تغییرات مکرر کارآمدتر می شود.

3. با استفاده از StringBuffer برای الحاق ایمن رشته

این برنامه استفاده از StringBuffer به روشی ایمن با نخ

public class StringBufferDemo {
public static void main(String[] args) {
StringBuffer sb = new StringBuffer(“Hello”);

sb.append(” World”);
sb.append(“!”);

System.out.println(“Thread-Safe String: ” + sb.toString()); // Output: Hello World!
}
}

این کد مشابه است StringBuilder، اما StringBuffer همگام شده است و آن را برای محیط های چند رشته ای مناسب می کند.

4. مقایسه String، StringBuilder و StringBuffer

این برنامه به مقایسه عملکرد بین String، StringBuilder، و StringBuffer هنگام انجام همان عملیات الحاق.

public class StringPerformanceComparison {
public static void main(String[] args) {
// Using String (Immutable)
String str = “”;
long startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
str += i;
}
long endTime = System.currentTimeMillis();
System.out.println(“String time: ” + (endTime – startTime) + “ms”);

// Using StringBuilder (Mutable)
StringBuilder sb = new StringBuilder();
startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
sb.append(i);
}
endTime = System.currentTimeMillis();
System.out.println(“StringBuilder time: ” + (endTime – startTime) + “ms”);

// Using StringBuffer (Mutable & Thread-Safe)
StringBuffer sbf = new StringBuffer();
startTime = System.currentTimeMillis();
for (int i = 0; i < 10000; i++) {
sbf.append(i);
}
endTime = System.currentTimeMillis();
System.out.println(“StringBuffer time: ” + (endTime – startTime) + “ms”);
}
}

این برنامه نشان می دهد که چقدر سریعتر است StringBuilder و StringBuffer مقایسه می شوند String هنگام انجام بسیاری از الحاقات

5. معکوس کردن یک رشته با استفاده از StringBuilder

public class ReverseStringBuilder {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(“Hello World”);
sb.reverse();

System.out.println(“Reversed String: ” + sb.toString()); // Output: dlroW olleH
}
}

را reverse() روش از StringBuilder برای معکوس کردن کاراکترهای یک رشته استفاده می شود.

این برنامه ها باید به شما کمک کنند تا درک خود را از رشته ها تازه کنید، StringBuilder، و StringBuffer!

در جاوا، رشته ها به دلیل تغییر ناپذیری، متفاوت از سایر اشیاء مدیریت می شوند. جاوا نیز فراهم می کند StringBuilder و StringBuffer کلاس هایی برای کار با دنباله های قابل تغییر کاراکترها، که انعطاف پذیری بیشتری برای دستکاری رشته ها ارائه می دهد.

1. تغییرناپذیری رشته ها

در جاوا، String کلاس است تغییرناپذیر، یعنی یک بار الف String شی ایجاد می شود، نمی توان آن را تغییر داد. هر گونه تغییر در یک رشته (مانند الحاق یا جایگزینی) منجر به ایجاد یک رشته جدید می شود String شی

ویژگی های کلیدی String Immutability:

  • ایمنی نخ: از آنجایی که رشته ها تغییر ناپذیر هستند، می توان آنها را به طور ایمن در چندین رشته بدون خطر تغییر توسط یک رشته در حالی که توسط رشته دیگر استفاده می شود به اشتراک گذاشت.
  • عملکرد: تغییرناپذیری رشته به بهینه سازی حافظه با فعال کردن رشته های داخلی کمک می کند، جایی که JVM می تواند همان رشته را در یک رشته ذخیره کرده و دوباره استفاده کند. استخر رشته ای.
  • امنیت: رشته های تغییرناپذیر برای استفاده در کدهای حساس به امنیت، مانند اتصالات پایگاه داده یا مسیرهای فایل ایمن هستند، زیرا پس از ایجاد نمی توان آنها را تغییر داد.

مثالی از تغییرناپذیری:

public class StringImmutability {
    public static void main(String[] args) {
        String str = "Hello";
        str = str.concat(", World!");  // This creates a new String object
        System.out.println(str);  // Output: Hello, World!
    }
}
  • در این مثال، اصل "Hello" رشته بدون تغییر باقی می ماند، و concat روش a ایجاد می کند رشته جدید "Hello, World!".

2. رشته های قابل تغییر: StringBuilder و StringBuffer

برای اصلاح موثر رشته ها، جاوا فراهم می کند StringBuilder و StringBuffer. این کلاس‌ها توالی‌های قابل تغییر کاراکتر را امکان‌پذیر می‌سازند، و آنها را برای موقعیت‌هایی که نیاز به تغییرات مکرر رشته‌ها است، مناسب‌تر می‌سازد.

تفاوت های کلیدی بین StringBuilder و StringBuffer:

ویژگی StringBuilder StringBuffer
تغییرپذیری قابل تغییر است قابل تغییر است
ایمنی نخ ایمن برای نخ نیست ایمن با نخ (همگام)
عملکرد سریعتر به دلیل عدم همگام سازی کندتر به دلیل همگام سازی
استفاده از مورد در زمینه های تک رشته ای ترجیح داده می شود در زمینه های چند رشته ای ترجیح داده می شود

3. StringBuilder

StringBuilder یک کلاس قابل تغییر است که امکان تغییر رشته ها را بدون ایجاد اشیاء جدید فراهم می کند. سریعتر از StringBuffer چون هست هماهنگ نیست، به این معنی که ایمنی نخ را فراهم نمی کند.

نمونه ای از استفاده StringBuilder:

public class StringBuilderExample {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");
        sb.append(", World!");  // Modifying the existing object
        System.out.println(sb.toString());  // Output: Hello, World!
    }
}
  • در این مثال، StringBuilder شی به طور مستقیم با append()، بدون ایجاد یک شی جدید.
  • این باعث می شود StringBuilder بسیار کارآمدتر از String برای کارهایی که مستلزم تغییرات مکرر رشته هستند.

روش های رایج StringBuilder:

  • append(String s): رشته را به انتهای دنباله فعلی اضافه می کند.
  • insert(int offset, String s): رشته را در موقعیت مشخص شده قرار می دهد.
  • delete(int start, int end): کاراکترهای محدوده داده شده را حذف می کند.
  • reverse(): دنباله را برعکس می کند.

4. StringBuffer

StringBuffer مشابه است StringBuilder، اما هست هماهنگ شده، ساختن آن ایمن با نخ. این بدان معنی است که چندین رشته می توانند به طور ایمن به آن دسترسی داشته باشند، اما همگام سازی با هزینه عملکرد همراه است.

نمونه ای از استفاده StringBuffer:

public class StringBufferExample {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("Hello");
        sb.append(", World!");  // Modifying the existing object
        System.out.println(sb.toString());  // Output: Hello, World!
    }
}
  • شبیه به StringBuilder، StringBuffer امکان تغییر مستقیم رشته را فراهم می کند. با این حال، به دلیل سربار همگام سازی کندتر است.

روش های رایج StringBuffer:

  • همان StringBuilder، با روش هایی مانند append()، insert()، delete()، و reverse()، اما بدون نخ.

5. مقایسه عملکرد: String در مقابل StringBuilder در مقابل StringBuffer

رشته (غیرقابل تغییر):

  • آهسته تر برای تغییرات مکرر زیرا هر تغییر یک شی جدید ایجاد می کند.
  • بهترین برای فقط خواندنی یا ثابت شده است عملیات رشته

StringBuilder (قابل تغییر، همگام نیست):

  • سریعتر برای الحاق رشته و اصلاح.
  • بهترین برای تک رشته ای برنامه های کاربردی یا زمانی که ایمنی رزوه نگران کننده نیست.

StringBuffer (قابل تغییر، همگام):

  • آهسته تر از StringBuilder به دلیل ایمنی نخ (همگام سازی).
  • بهترین برای چند رشته ای برنامه هایی که رشته ها توسط رشته های متعدد اصلاح می شوند.

6. سناریوهای مورد استفاده عملی

  • استفاده کنید String: برای عملیات رشته ساده یا زمانی که رشته ها اغلب تغییر نمی کنند.

    • مثال: اختصاص یک پیام ثابت، ثبت یک رشته ثابت.
  • استفاده کنید StringBuilder: برای تغییرات مکرر در زمینه تک رشته ای.

    • مثال: به هم پیوستن رشته ها در یک حلقه.
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < 5; i++) {
      sb.append("Iteration ").append(i).append(" ");
  }
  System.out.println(sb.toString());
  • استفاده کنید StringBuffer: در محیط های چند رشته ای که چندین رشته ممکن است رشته مشابهی را تغییر دهند.

    • مثال: اصلاح رشته های مشترک در یک سیستم ورود به سیستم چند رشته ای.
  StringBuffer sb = new StringBuffer();
  sb.append("Thread-safe modifications");

7. نتیجه گیری

  • رشته ها در جاوا هستند تغییرناپذیر به دلایل عملکرد، امنیت و ایمنی نخ.
  • StringBuilder بهترین انتخاب برای تغییرات مکرر در برنامه های تک رشته ای به دلیل سرعت آن است.
  • StringBuffer جایگزین ایمن برای نخ است StringBuilder و در محیط های چند رشته ای که نیاز به همگام سازی است استفاده می شود.

انتخاب کلاس مدیریت رشته مناسب بستگی به این دارد که آیا به تغییر ناپذیری، عملکرد یا ایمنی نخ نیاز دارید.

در اینجا چند برنامه کوچک وجود دارد که به شما کمک می کند تا درک خود را از آنها تازه کنید تغییرناپذیری رشته، StringBuilder، و StringBuffer در جاوا:

1. تغییرناپذیری رشته ها

این برنامه نشان می دهد که چگونه رشته ها تغییرناپذیر هستند و چگونه هر تغییری منجر به یک شی جدید می شود.

public class StringImmutabilityDemo {
    public static void main(String[] args) {
        String str1 = "Hello";
        String str2 = str1.concat(" World");

        System.out.println("Original String: " + str1);  // Output: Hello
        System.out.println("Modified String: " + str2);  // Output: Hello World
    }
}
  • در این مثال، str1 پس از الحاق اصلاح نمی شود. یک رشته جدید str2 ایجاد می شود.

2. با استفاده از StringBuilder برای الحاق کارآمد

این برنامه نحوه استفاده را نشان می دهد StringBuilder برای به هم پیوستن موثر رشته ها

public class StringBuilderDemo {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello");

        sb.append(" World");
        sb.append("!");

        System.out.println("Resulting String: " + sb.toString());  // Output: Hello World!
    }
}
  • همینطور StringBuilder شی چندین بار بدون ایجاد اشیاء جدید اصلاح می شود و برای تغییرات مکرر کارآمدتر می شود.

3. با استفاده از StringBuffer برای الحاق ایمن رشته

این برنامه استفاده از StringBuffer به روشی ایمن با نخ

public class StringBufferDemo {
    public static void main(String[] args) {
        StringBuffer sb = new StringBuffer("Hello");

        sb.append(" World");
        sb.append("!");

        System.out.println("Thread-Safe String: " + sb.toString());  // Output: Hello World!
    }
}
  • این کد مشابه است StringBuilder، اما StringBuffer همگام شده است و آن را برای محیط های چند رشته ای مناسب می کند.

4. مقایسه String، StringBuilder و StringBuffer

این برنامه به مقایسه عملکرد بین String، StringBuilder، و StringBuffer هنگام انجام همان عملیات الحاق.

public class StringPerformanceComparison {
    public static void main(String[] args) {
        // Using String (Immutable)
        String str = "";
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            str += i;
        }
        long endTime = System.currentTimeMillis();
        System.out.println("String time: " + (endTime - startTime) + "ms");

        // Using StringBuilder (Mutable)
        StringBuilder sb = new StringBuilder();
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            sb.append(i);
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuilder time: " + (endTime - startTime) + "ms");

        // Using StringBuffer (Mutable & Thread-Safe)
        StringBuffer sbf = new StringBuffer();
        startTime = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            sbf.append(i);
        }
        endTime = System.currentTimeMillis();
        System.out.println("StringBuffer time: " + (endTime - startTime) + "ms");
    }
}
  • این برنامه نشان می دهد که چقدر سریعتر است StringBuilder و StringBuffer مقایسه می شوند String هنگام انجام بسیاری از الحاقات

5. معکوس کردن یک رشته با استفاده از StringBuilder

public class ReverseStringBuilder {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder("Hello World");
        sb.reverse();

        System.out.println("Reversed String: " + sb.toString());  // Output: dlroW olleH
    }
}
  • را reverse() روش از StringBuilder برای معکوس کردن کاراکترهای یک رشته استفاده می شود.

این برنامه ها باید به شما کمک کنند تا درک خود را از رشته ها تازه کنید، StringBuilder، و StringBuffer!

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا