dispone de una copia de la matriz mStack
con la representación de cadena, por defecto inicializado con la cadena vacía, por lo que su bucle sería:
String [] mStackCopy = new String[]{"","","","","","","","","","",};
// or mstackCopy = new String[mStack.length];
// for(int i = 0 ; i < mStackCopy.lenght ; i++) { mStack[i] = "" }
También, crear el StringBuilder con suficiente capacidad:
StringBuilder sb = new StringBuilder(10000);// 10k chars or whatever makes sense.
Por lo tanto, cuando se necesita para crear el mensaje que lo haría simplemente:
for (int i = 0; i <= step; i++) {
sb.append(mStackCopy[i]);
}
y vacío partes no causará un problema porque ya están en blanco:
Usted puede incluso codificar difícil que:
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]);
Pero esto causaría más dolor que alivio en el futuro, garantizado.
cuando se agrega algo a su mStack:
MStack item = new MStack();
item.setCurrentMessage("Some message");
....
Simplemente haga una copia del mensaje y añadir el "" ya.
addToMStack(int position, MStackItem item) {
mStack[position] = item;
mStackCopy[position] = item.getCurrentMessage() + ", ";
}
Y dependiendo de la ocurrencia de valores nulos (si su baja) se puede coger ellos
addToMStack(int position, MStackItem item) {
if(item == null) { return; }
mStack[position] = item;
try {
mStackCopy[position] = item.getCurrentMessage() + ", ";
} catch(NullPointerException npe){}
}
Cuál es horrendo
o validar que:
addToMStack(int position, MStackItem item) {
if(item == null) { return; }
mStack[position] = item;
mStackCopy[position] = item.getCurrentMessage() + ", ";
}
Estoy bastante seguro de que su método está haciendo otra cosa que usted no nos muestres Probablemente la razón esté ahí.
Además, el 16% no es tan malo, si el 100% es 1 seg.
Su método dice que tiene un tipo de retorno de RatedMessage pero parece devolver una cadena. ¿Que esta pasando? Además, ¿qué tan grandes son estos objetos rm.msg, son cadenas o hay un toString implícito siendo invocado sobre ellos? – luke
Lo siento, reduje el código a la parte esencial. Hay una tasa, número flotante para cada mensaje. rm significa RatedMessage. – Pentium10
@ Pentium10, creo que cortaste demasiado. Usted tiene un punto de acceso y básicamente está asumiendo que ciertas cosas no son el problema y luego pregunta por el resto. Si tiene un código de trabajo que ha demostrado que aún es lento pero es más simple (si está roto en el sentido de que arroja la respuesta incorrecta), es genial, pero no recorte tanto y espere obtener una respuesta significativa aquí. – Yishai