2011-05-09 25 views
5

tengo una matriz, por ejemplo:Cómo eliminar elemento de una matriz

String [][] test = {{"a","1"}, 
        {"b","1"}, 
        {"c","1"}}; 

¿Puede alguien decirme cómo eliminar un elemento de la matriz. Por ejemplo, yo quiero quitar punto "b", de manera que la matriz se ve así:

{{"a","1"}, 
{"c","1"}} 

No puedo encontrar una manera de hacerlo. Lo que he encontrado aquí hasta ahora no está funcionando para mí :(

+0

Es mejor utilizar una 'ArrayList' en lugar de una matriz. – Behrang

+0

posible duplicado de [¿Cómo elimino objetos de una matriz en Java?] (Http://stackoverflow.com/questions/112503/how-do-i-remove-objects-from-an-array-in-java) – McDowell

+0

no .... no está duplicado. – Peter

Respuesta

10

No se puede eliminar un elemento de una matriz. El tamaño de una matriz de Java se determina cuando la matriz está asignada y no se puede cambiar. Lo mejor que puede hacer es:

  • Asignar null a la matriz en la posición pertinente; p.ej.

    test[1] = null; 
    

    Esto le deja con el problema de tratar con los "agujeros" en la matriz donde los valores son null. (En algunos casos esto no es un problema ... pero en la mayoría de los casos lo es).

  • Crea una nueva matriz con el elemento eliminado; p.ej.

    String[][] tmp = new String[test.length - 1][]; 
    int j = 0; 
    for (int i = 0; i < test.length; i++) { 
        if (i != indexOfItemToRemove) { 
         tmp[j++] = test[i]; 
        } 
    } 
    test = tmp; 
    

    Los Apache Commons ArrayUtils clase tiene algunos métodos estáticos que va a hacer esto más claramente (por ejemplo Object[] ArrayUtils.remove(Object[], int), pero el hecho es que este enfoque crea un nuevo objeto de matriz.

un mejor enfoque sería ser el uso de un adecuado tipo de Collection Por ejemplo, el tipo ArrayList tiene un método que le permite eliminar el elemento en una posición dada

6

No hay manera integrada para "eliminar" elementos de una matriz regular de Java.

lo que desea utilizar es una ArrayList.

2

se podría establecer la entrada de la matriz a null (test[0][1] = null;). sin embargo, "eliminar" el elemento de tal manera que la matriz tendrá un elemento menos que antes no es factible sin volver a crear la matriz. Si va a cambiar los datos en la estructura de datos regularmente un ArrayList (u otra clase de Colección según sus necesidades) podría ser más conveniente.

0

Mi solución es:..

No se puede eliminar un elemento de una matriz => es correcto, pero podemos hacer algo para cambiar la matriz actual.

No need assign null to the array at the relevant position; e.g. 

test[1] = null; 

Create a new array with the element removed; e.g. 

String[][] temp = new String[test.length - 1][]; 

necesita para obtener índice en cadena/matriz para eliminar: IndexToRemove

for (int i = 0; i < test.length-1; i++) { 
       if (i<IndexToRemove){ 
        temp[i]=test[i]; 
       }else if (i==IndexToRemove){ 
        temp[i]=test[i+1]; 
       }else { 
        temp[i]=test[i+1]; 
       } 
} 
test = temp; 

espero que útil!

Cuestiones relacionadas