مدیریت رشته در جاوا: تغییرناپذیری رشته ها، «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
!