Производительность алгоритма с использованием массива Stringbuilder и Integer

Я пытаюсь сформировать строку (длиной 10 000) с 1 и 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

Кроме того, как лучше преобразовать целочисленный массив в строку?


person user1583803    schedule 21.03.2018    source источник


Ответы (2)


Если вы действительно хотите построить строку с 1s и 0s известной длины, то наиболее эффективным было бы, вероятно, построить массив символов и создать из него строку. Что-то в духе:

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().

person lexicore    schedule 21.03.2018

Ни один из вышеперечисленных.

Лучше всего вам подходит класс BitSet. .

Этот класс реализует вектор битов, который увеличивается по мере необходимости. Каждый компонент набора битов имеет логическое значение. Биты BitSet индексируются неотрицательными целыми числами. Отдельные индексированные биты могут быть проверены, установлены или очищены. Один набор битов может использоваться для изменения содержимого другого набора битов с помощью операций логического И, логического включающего ИЛИ и логического исключающего ИЛИ.

По умолчанию все биты в наборе изначально имеют значение false.

person Suresh Atta    schedule 21.03.2018
comment
Как именно BitSet делает более эффективным формирование строки с 1s и 0s? - person lexicore; 21.03.2018