জাভাতে স্ট্রিং বাফারটি আপনি কীভাবে একটি লুপের পরে সাফ করবেন যাতে পরবর্তী পুনরাবৃত্তিটি একটি পরিষ্কার স্ট্রিং বাফার ব্যবহার করে?
জাভাতে স্ট্রিং বাফারটি আপনি কীভাবে একটি লুপের পরে সাফ করবেন যাতে পরবর্তী পুনরাবৃত্তিটি একটি পরিষ্কার স্ট্রিং বাফার ব্যবহার করে?
উত্তর:
একটি বিকল্প হ'ল মুছে ফেলা পদ্ধতিটি নিম্নরূপ ব্যবহার করুন:
StringBuffer sb = new StringBuffer();
for (int n = 0; n < 10; n++) {
sb.append("a");
// This will clear the buffer
sb.delete(0, sb.length());
}
আরেকটি বিকল্প (বিট ক্লিনার) সেটলেন্থ (ইন লেন) ব্যবহার করে :
sb.setLength(0);
আরও তথ্যের জন্য জাভাদোক দেখুন :
এর পুনরায় StringBuffer
ব্যবহারের সহজ উপায় হ'ল পদ্ধতিটি ব্যবহার করাsetLength()
public void setLength(int newLength)
আপনার মত মামলা হতে পারে
StringBuffer sb = new StringBuffer("HelloWorld");
// after many iterations and manipulations
sb.setLength(0);
// reuse sb
setLength
পরিবর্তে পড়া উচিত setlength
।
আপনার দুটি বিকল্প রয়েছে:
হয় ব্যবহার:
sb.setLength(0); // It will just discard the previous data, which will be garbage collected later.
বা ব্যবহার করুন:
sb.delete(0, sb.length()); // A bit slower as it is used to delete sub sequence.
লুপের মধ্যে ডিক্লেয়ারিং StringBuffer
বা StringBuilder
অবজেক্টগুলি এড়িয়ে চলুন অন্যথায় এটি প্রতিটি পুনরাবৃত্তির সাহায্যে নতুন অবজেক্ট তৈরি করবে। অবজেক্ট তৈরিতে সিস্টেমের সংস্থান, স্থান প্রয়োজন এবং সময়ও লাগে। সুতরাং দীর্ঘ সময়ের জন্য, যদি সম্ভব হয় তবে এগুলি লুপের মধ্যে ঘোষণা করা থেকে বিরত করুন।
buf.delete(0, buf.length());
আমি প্রতিটি পুনরাবৃত্তির জন্য একটি নতুন StringBuffer
(বা আরও ভাল StringBuilder
) তৈরি করার পরামর্শ দিচ্ছি । পারফরম্যান্সের পার্থক্যটি সত্যিই নগন্য, তবে আপনার কোডটি খাটো এবং সহজ হবে।
public void clear(StringBuilder s) {
s.setLength(0);
}
ব্যবহার:
StringBuilder v = new StringBuilder();
clear(v);
পাঠযোগ্যতার জন্য, আমি মনে করি এটিই সেরা সমাধান।
ইতিমধ্যে সেখানে ভাল উত্তর। স্ট্রিংবুফার এবং স্ট্রিংবিল্ড পারফরম্যান্স পার্থক্যের জন্য কেবল একটি মানদণ্ডের ফলাফল যুক্ত করুন লুপে নতুন উদাহরণ ব্যবহার করুন বা লুপে সেটলেন্থ (0) ব্যবহার করুন।
সংক্ষিপ্তসারটি হ'ল: একটি বড় লুপে
খুব সাধারণ মানদণ্ড (আমি কেবল কোডটি ম্যানুয়ালি পরিবর্তিত করেছি এবং বিভিন্ন পরীক্ষা করি):
public class StringBuilderSpeed {
public static final char ch[] = new char[]{'a','b','c','d','e','f','g','h','i'};
public static void main(String a[]){
int loopTime = 99999999;
long startTime = System.currentTimeMillis();
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < loopTime; i++){
for(char c : ch){
sb.append(c);
}
sb.setLength(0);
}
long endTime = System.currentTimeMillis();
System.out.println("Time cost: " + (endTime - startTime));
}
}
লুপে নতুন স্ট্রিংবিল্ডার উদাহরণ: সময় ব্যয়: 3693, 3862, 3624, 3742
স্ট্রিংবিল্ডার সেট দৈর্ঘ্য: সময় ব্যয়: 3465, 3421, 3557, 3408
লুপে নতুন স্ট্রিংবফার উদাহরণ: সময় ব্যয়: 8327, 8324, 8284
স্ট্রিংবাফার সেট দৈর্ঘ্যের সময় ব্যয়: 22878, 23017, 22894
স্ট্রিংবুডার সেটলেন্থ :-) জন্য আমার ল্যাপটপটি এত দীর্ঘ ব্যবহার করার জন্য কিছু সমস্যা পেয়েছে না তা নিশ্চিত করার জন্য আবার স্ট্রিংবিল্ডার সেটলেন্থ সেট করে Time
StringBuffer sb = new SringBuffer();
// do something wiht it
sb = new StringBuffer();
আমি মনে করি এই কোডটি আরও দ্রুত।