使用Stringbuilder与Integer数组的算法性能

时间:2018-03-21 09:59:43

标签: java arrays performance stringbuilder

我正在尝试根据特定条件'有效'来形成一个字符串(长度为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?

2 个答案:

答案 0 :(得分:2)

以上都不是。

最合适的课程是BitSet

  

该类实现了一个根据需要增长的位向量。位组的每个组件都有一个布尔值。 BitSet的位由非负整数索引。可以检查,设置或清除各个索引位。一个BitSet可用于通过逻辑AND,逻辑包含OR和逻辑异或运算来修改另一个BitSet的内容。

默认情况下,集合中的所有位最初都具有值false。

答案 1 :(得分:2)

如果你真的想要构建一个已知长度为10的字符串,那么效率最高的可能是构建一个字符数组并从中创建一个字符串。一些事情:

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(以足够的容量初始化)可能具有相同的性能,所以我实际上已经接受了它。有一些最小的容量,但它甚至不值得一提。

此处建议的其他结构(整数数组或位集)可能更适合存储10,但它们仍需要转换为字符串。无论如何,这可能需要StringBuilder。例如,BitSet在其StringBuilder方法中使用toString()