Saludos compañeros, tengo el siguiente codigo que lo que intento hacer es rellenar una lista (l_aleat_pos) con pos cadenas (Strings) y un vector cad_pru_pos con test_pos cadenas (cada cadena puede ser como mucho de longitud l_max), y el metodo calcular_numero_aleatorio tarda menos de un segundo en ejecutarse.
(los caracteres estan en una matriz, y dicha cadena es valida si acaba en una posicion cuya componente este marcada en otro vector como final, como true)
Pues bien, sin cambiar nada de estructuras de almacenamiento he notado que para crear 7 cadenas de cada lista, de longitud maxima 7, tarda alrededor de un minuto, y es mucho tiempo, ya que antes tardaba como mucho 20 segundos. Como lo puedo mejorar ???
public void obtener_cadenas(LinkedList [][]mat, int l_max, int pos, int neg, int test_pos, int test_neg, int c_alf, Vector est_finales)
{
int est=0;
double prob=0.2;
String cadena="";
double prob_cada_estado;
DefaultListModel modelo_lista_pos=new DefaultListModel();
DefaultListModel modelo_lista_neg=new DefaultListModel();
Vector v_cadenas;
long t1= System.currentTimeMillis();
while ((l_aleat_pos.getModel().getSize()<pos) && (cad_pru_pos.size()<test_pos))
{
while (cadena.length()<=l_max)
{
v_cadenas=new Vector();
new Obtener_caracteres_fila(v_cadenas, mat, est);
prob_cada_estado=(1-prob)/(v_cadenas.size()-1);
double num_aleatorio=calcular_numero_aleatorio();
int casilla_vector;
if (num_aleatorio>(1-prob)) casilla_vector=v_cadenas.size()-1;
else casilla_vector=(int)(num_aleatorio/prob_cada_estado);
if (casilla_vector==v_cadenas.size()-1)
{
if (est_finales.get(est).equals(new Boolean(true)))
{
if (modelo_lista_pos.size()<pos)
{
modelo_lista_pos.addElement(cadena);
cad_pos.add(new String(cadena));
}
else if (cad_pru_pos.size()<test_pos)
{
System.out.println(cadena);
cad_pru_pos.add(new String(cadena));
}
est=0;
cadena="";
}
else
{
System.out.println(cadena);
cadena="";
est=0;
}
} // si hay transicion, un caracter de estado a estado
else
{
cadena=cadena+v_cadenas.get(casilla_vector);
est=calcular_estado_final(mat, est, v_cadenas.get(casilla_vector).toString());
}
} // del while de la longitud maxima
if (cadena.length()>l_max)
{
cadena="";
est=0;
}
} // del while
.... } // fin del metodo.
Por favor, ayudadme. Muchas gracias.