Имеется отдельная копия массива mStack
со строковым представлением, по умолчанию инициализируемая пустой строкой, поэтому ваш цикл будет:
String [] mStackCopy = new String[]{"","","","","","","","","","",};
// or mstackCopy = new String[mStack.length];
// for( int i = 0 ; i < mStackCopy.lenght ; i++ ) { mStack[i] = "" }
Кроме того, создайте StringBuilder с достаточной емкостью:
StringBuilder sb = new StringBuilder( 10000 );// 10k chars or whatever makes sense.
Итак, когда вам нужно создать сообщение, вы просто:
for (int i = 0; i <= step; i++) {
sb.append( mStackCopy[i] );
}
И пустые части не вызовут проблем, потому что они уже пустые:
Вы можете даже жестко закодировать это:
sb.append( mStackCopy[0]);
sb.append( mStackCopy[1]);
sb.append( mStackCopy[2]);
sb.append( mStackCopy[3]);
sb.append( mStackCopy[4]);
sb.append( mStackCopy[5]);
sb.append( mStackCopy[6]);
sb.append( mStackCopy[7]);
sb.append( mStackCopy[8]);
sb.append( mStackCopy[9]);
Но это принесет больше боли, чем облегчения в будущем, гарантировано.
Когда вы добавляете что-то в свой mStack:
MStack item = new MStack();
item.setCurrentMessage("Some message");
....
Просто сделайте копию сообщения и уже добавьте ",".
addToMStack(int position, MStackItem item ) {
mStack[position] = item;
mStackCopy[position] = item.getCurrentMessage() + ", ";
}
И в зависимости от появления нулей (если оно низкое) их можно поймать
addToMStack(int position, MStackItem item ) {
if( item == null ) { return; }
mStack[position] = item;
try {
mStackCopy[position] = item.getCurrentMessage() + ", ";
} catch( NullPointerException npe ){}
}
Что ужасно
Или подтвердите его:
addToMStack(int position, MStackItem item ) {
if( item == null ) { return; }
mStack[position] = item;
mStackCopy[position] = item.getCurrentMessage() + ", ";
}
Я почти уверен, что ваш метод делает что-то еще, что вы нам не показываете. Вероятно, причина здесь.
Кроме того, 16% - это не так уж плохо, если 100% - 1 сек.