我正在尝试根据特定条件'有效'来形成一个字符串(长度为10,000),其中包含1和0以及0。
虽然我能够做到这一点,但我对性能表示担忧,需要一些帮助才能确定以下两种方法中的哪一种方法会更好。
方法1(使用Stringbuilder)
StringBuilder output = new StringBuilder();
for( int i = 0; i < 10000; i++ )
{
if ( valid )
{
output.append( "1" );
}
else
{
output.append( "0" );
}
}
方法2(使用整数数组)
int[] gridArray = new int[ 10000 ];
for( int i = 0; i < 10000; i++ )
{
if ( valid )
{
gridArray[i] = 1;
}
}
//Convert grid array to string output
另外, best 如何将整数数组转换为String?
答案 0 :(得分:2)
以上都不是。
最合适的课程是BitSet。
该类实现了一个根据需要增长的位向量。位组的每个组件都有一个布尔值。 BitSet的位由非负整数索引。可以检查,设置或清除各个索引位。一个BitSet可用于通过逻辑AND,逻辑包含OR和逻辑异或运算来修改另一个BitSet的内容。
默认情况下,集合中的所有位最初都具有值false。
答案 1 :(得分:2)
如果你真的想要构建一个已知长度为1
和0
的字符串,那么效率最高的可能是构建一个字符数组并从中创建一个字符串。一些事情:
char[] result = new char[10000];
for (int index = 0; index < result.length; index++) {
result[index] = (index %2 == 0) ? '1' : '0';
}
String stringResult = new String(result);
StringBuilder
(以足够的容量初始化)可能具有相同的性能,所以我实际上已经接受了它。有一些最小的容量,但它甚至不值得一提。
此处建议的其他结构(整数数组或位集)可能更适合存储1
和0
,但它们仍需要转换为字符串。无论如何,这可能需要StringBuilder
。例如,BitSet
在其StringBuilder
方法中使用toString()
。