字符串列表VS字符串数组VS Stringbuilder

时间:2013-12-11 06:36:57

标签: java

根据性能选择存储字符串列表的最佳选择。

哪一个提供最佳性能。

感谢。

5 个答案:

答案 0 :(得分:8)

ArrayList是一个很好的通用目标List,通常会超过ArrayLinkedList。以下是时间复杂度方面的细分(V是类型,i是索引):

       Type | add(V) | remove(V) | get(i) | 
-------------------------------------------
      Array |  O(n)  |    O(n)   |  O(1)  |
  ArrayList |  O(1)  |    O(n)   |  O(1)  |
 LinkedList |  O(1)  |    O(1)   |  O(n)  |

一般情况下,您可以使用此规则:

数组:如果您知道元素的确切数量并且不需要添加或删除元素,请使用。

列表:如果您不知道确切的元素数量并需要添加或删除元素,请使用。

StringBuilder完全不同。 StringBuilder是一个可变字符串。您可以将其视为List<Character>。从这个意义上讲,它可能不是你需要的,所以把它与List<String>String[]进行比较可能不是有益的。

答案 1 :(得分:2)

java 7之前的字符串文字列表将消耗你的permgen区域,这可能导致JVM崩溃。所以,如果你有更多的字符串,那么最好去Stringbuilder。 Stringbuilder内部使用char数组。但是,使用Stringbuilder存储String列表时,您可能必须使用特殊字符进行分隔,然后使用split()来检索列表。

更好的替代方案是使用String数组。如前所述,即使Stringbuilder使用char数组。因此,如果您确定要存储String列表,那么这将是一个不错的选择。但如果这是唯一的目标,我会说为什么不使用ArratList ...你不必担心数组的大小。

答案 2 :(得分:1)

构造大字符串时始终使用StringBuilder。虽然速度差异不明显,但这是最有效的。

我还听说过,当你在字符串上使用plus运算符时,Java会在内部使用构建器。虽然我不确定,但这种可能性很小。

答案 3 :(得分:1)

String是一个不可变类,无法更改。 StringBuilder是一个可变类,可以追加,替换或删除字符,最终转换为String

请注意,如果您使用的是Java 5或更高版本,则应使用StringBuilder代替StringBuffer。从API文档:

  

自JDK 5发布以来,该类已经补充了一个等效类,专为单个线程StringBuilder使用而设计。通常应优先使用StringBuilder类,因为它支持所有相同的操作,但它更快,因为它不执行同步。

More

答案 4 :(得分:0)

  • 当您要指定大小的数据时,可以使用字符串数组。 字符串数组 是不可长大的。
  • 当您的数据可增长时,会使用收集类。这意味着 如果您的数组大小会动态变化或运行时,那么您可以使用它。
  • StringBuilder不用于存储数据列表。它附加字符串数据,如String缓冲区。如果 你搜索String VS StringBuffer Vs String之间的区别 建造者,你可以得到想法