2011-11-15 67 views
1

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

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" 

回答

2

使用StringBuilderArrayList

StringBufferVector有线程同步,增加了开销(除非你需要它,但即便如此,有办法将它添加到新的类)

+0

谢谢Brian ...! – user1010399

2

从Javadoc中的StringBuffer:

StringBuilder类通常应优先使用这一个,因为它支持所有相同的操作,但它是快的,因为它不执行同步。

此外,我认为矢量是由一个数组内部支持,并且已被大量弃用。如果你想快速附加,那么你可能想看一下LinkedList(它是稍微比纯粹的附加ArrayList更快,因为你不必定期增长支持数组)。

但是,如果这只是针对字符序列,那么StringBuilder会针对这种情况进行优化,并且您不应该将Collections与所有开销混为一谈。

+0

感谢bdares!在我的情况下,字符序列是重要的,并且在运行时大小也是重要的。所以我认为StringBuilder会很好用。 – user1010399

+0

不知道为什么,'vector'在项目中使用的是相同的,但我觉得矢量并不是只对字符串进行整理的正确选择。 – user1010399

0

如果你不需要要同步你可以避免使用StringBuffer和Vector,而更喜欢StringBuilder和ArrayList。

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

0

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

0

如果你在一个线程内部完成这个任务,你希望在所有你想实现的都是字符串连接时使用a StringBuilder;对于多种类型,请使用ArrayList

2

Mainlly StringBuffer方法​​而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是​​但ArrayList不​​和第二个

A Vector defaults to doubling the size of its array, while the ArrayList increases its 
array size by 50 percent. 

所以要根据您的需要选择..

+0

StringBuffer几乎不需要同步,主要是为了向后兼容。 –