我的要求是存储大块数据(字符串值),但我很困惑哪一个更好用。我只想追加传入的数据。
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"
答案 0 :(得分:2)
来自StringBuffer的javadoc:
StringBuilder类通常应优先于此使用,因为它支持所有相同的操作,但速度更快,因为它不执行同步。
此外,我认为Vector也在内部由数组支持,并且几乎已被弃用。如果你想快速附加,那么你可能想看一下LinkedList(它的略微比ArrayList更快,因为你不必定期增长后备阵列)。
但是,如果这只是字符序列,那么StringBuilder就是针对这种情况进行了优化的,你不应该用它们的所有开销来处理集合。
答案 1 :(得分:2)
使用StringBuilder
和ArrayList
StringBuffer
和Vector
具有线程同步,增加了开销(除非您需要它,但即使这样,也有办法将其添加到较新的类中)
答案 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
相同,ArrayList
但synchronized
不是 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
。