StringBuilder与StringBuffer或向量Vs ArrayList

时间:2011-11-15 06:26:26

标签: java

我的要求是存储大块数据(字符串值),但我很困惑哪一个更好用。我只想追加传入的数据。

e.g. String str1 = "abc"
     String str2 = "123";
     String Str3 = "xyz"; 

 suppose i am appending/ adding to  (Sbuilder/SBuffer/ vector/ ArrayList)  
 one after another, 
         e.g.  str1, str2 str3    then output must be    "abc123xyz"
               str2, str1,str3    output must be         "123abcxyz"

6 个答案:

答案 0 :(得分:2)

来自StringBuffer的javadoc:

  

StringBuilder类通常应优先于此使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步。

此外,我认为Vector也在内部由数组支持,并且几乎已被弃用。如果你想快速附加,那么你可能想看一下LinkedList(它的略微比ArrayList更快,因为你不必定期增长后备阵列)。

但是,如果这只是字符序列,那么StringBuilder就是针对这种情况进行了优化的,你不应该用它们的所有开销来处理集合。

答案 1 :(得分:2)

使用StringBuilderArrayList

StringBufferVector具有线程同步,增加了开销(除非您需要它,但即使这样,也有办法将其添加到较新的类中)

答案 2 :(得分:2)

主要StringBuffer方法为synchronized,而StringBuilder则不是This class [StringBuilder] provides an API compatible with StringBuffer, but with no guarantee of synchronization. This class is designed for use as a drop-in replacement for StringBuffer in places where the string buffer was being used by a single thread (as is generally the case). Where possible, it is recommended that this class be used in preference to StringBuffer as it will be faster under most i implementations.

Vector

* 与* synchronized相同,ArrayListsynchronized不是 A Vector defaults to doubling the size of its array, while the ArrayList increases its array size by 50 percent. ,第二

{{1}}

因此请根据您的要求选择..

答案 3 :(得分:0)

如果您不需要同步,可以避免使用StringBuffer和Vector,而是选择StringBuilder和ArrayList。

是否使用StringBuilder或ArrayList取决于您的要求。如果你只想连接字符串SB就足够了。

答案 4 :(得分:0)

如果数据大小在这种情况下是可变的,我们使用StringBuffer,因为StringBuffer类用于创建和操作动态字符串信息。分配给对象的内存是自动的。

答案 5 :(得分:0)

如果你在一个线程中执行此操作,当你想要实现的只是字符串连接时,你会想要使用a StringBuilder。对于多种类型,请使用ArrayList