Código Java – Redimensionar Matrices sin Borrar Registros con Redim Preserve

Este es el Ejemplo #21 del Topic: Programación Gráfica en Java.

Este será un post corto. Muchas veces mientras programamos hemos tenido la necesidad de re-dimensionar las matrices que ya hemos declarado sin perder los datos que ya tengamos registrados en ella, pues esto es tarea sencilla en otros lenguajes de programación pero no quiere decir que en java no lo sea. El siguiente procedimiento se encargará de ello. Lo que hará es recibir una matriz y un entero indicando el nuevo tamaño de la matriz y lo redimencionará automáticamente:

...
    public void redimPreserve(Object obj[],int i)
    {
        if(i>obj.length)
        {
            Object[] tempVar = new Object[i];
            if (obj != null)
                    System.arraycopy(obj, 0, tempVar, 0, Math.min(obj.length, tempVar.length));
            obj = tempVar;
        }
    }
...

Código de Ejemplo:

package beastieux.gui;

import javax.swing.JOptionPane;

/**
 *
 * @author beastieux
 */
public class Ejm21_RedimPreserve {

    public void redimPreserve(Object obj[],int i)
    {
        if(i>obj.length)
        {
            Object[] tempVar = new Object[i];
            if (obj != null)
                    System.arraycopy(obj, 0, tempVar, 0, Math.min(obj.length, tempVar.length));
            obj = tempVar;
        }
    }

    public static void main(String args[])
    {
        Ejm21_RedimPreserve obj = new Ejm21_RedimPreserve();

        String []a_num;

        a_num = new String[] {"1","2","3"};
        for(int i=0;i<a_num.length;i++)
            JOptionPane.showMessageDialog(null, a_num[i]);

        obj.redimPreserve(a_num,5);

        JOptionPane.showMessageDialog(null, "Después del redim preserve");

        a_num = new String[] {"1","2","3","4","5"};

        for(int i=0;i<a_num.length;i++)
            JOptionPane.showMessageDialog(null, a_num[i]);
    }
}

Pueder ir al artículo principal:

Códigos Sencillos hechos en Java

5 thoughts on “Código Java – Redimensionar Matrices sin Borrar Registros con Redim Preserve

  1. De nada sirve el metodo que propones, porque luego vuelves a recrear el arreglo, en otras palabras, la funcion solo sirve para comer memoria y tiempo de ejecucion, porque no hace nada.

  2. Tu función de redimPresev está incorrecta y no redimensiona nada porque los parámetros de tipo array se pasan por valor y no por referencia.
    Debería retornar el array redimensionado para que funcione

    Lo que vos estás haciendo en la rutina es llamar a redimPreserve y luego, recrear la matriz con los nuevos valores, cosa que no tiene nada que ver con el redim.

Deja un comentario