2010-12-27 19 views
54

Estoy tratando de agregar, quitar y referenciar elementos de una matriz que creo en mi archivo java principal, pero estoy teniendo problemas para encontrar la sintaxis correcta. En actionscript tienen push() y pop() para agregar y eliminar elementos en una matriz, ¿hay un equivalente en Android?equivalente a push() o pop() para matrices?

+1

¿Qué tipo de matriz tiene? ¿Puedes mostrarnos algún código? – EboMike

+0

int [] intArray = new int {2, 3, 5, 8, 13}; ¿cómo haré referencia intArray [3], o todos los elementos uno a la vez? – clayton33

Respuesta

5

Puede usar LinkedList. Tiene métodos peek, poll y offer.

24

En Java una matriz tiene un tamaño fijo (después de la inicialización), lo que significa que no se puede agregar o quitar elementos de una matriz.

int[] i = new int[10]; 

El fragmento anterior significa que la matriz de enteros tiene una longitud de 10. No es posible añadir un undécimo número entero, sin volver a asignar la referencia a una nueva matriz, como la siguiente:

int[] i = new int[11]; 

En Java, el paquete java.util contiene todo tipo de estructuras de datos que pueden manejar agregar y eliminar elementos de colecciones similares a una matriz. La estructura de datos clásica Stack tiene métodos para push y pop.

+6

Buena explicación, sin embargo, tenga en cuenta que Stack no es tan bueno de una clase, ya que hereda de Vector, y como tal está completamente sincronizado.Entonces, a menos que necesite la sincronización, ArrayList o LinkedList es probablemente una mejor opción. –

14

Para aquellos que no tienen tiempo para refactorizar el código para reemplazar matrices con Collection s (por ejemplo ArrayList), existe una alternativa. A diferencia de Collection s, la longitud de una matriz no se puede cambiar, pero la matriz puede ser reemplazado, así:

array = push(array, item); 

Los inconvenientes son que

  • el conjunto matriz tiene que ser copiado cada vez que se push, y
  • la matriz original Object no se cambia, por lo que debe actualizar la (s) variable (s) según corresponda.

Aquí es el método push para String:
(Se pueden crear múltiples push métodos, uno para String, uno para int, etc.)

private static String[] push(String[] array, String push) { 
    String[] longer = new String[array.length + 1]; 
    for (int i = 0; i < array.length; i++) 
     longer[i] = array[i]; 
    longer[array.length] = push; 
    return longer; 
} 

Esta alternativa es más eficiente, más corto & más duro para leer:

private static String[] push(String[] array, String push) { 
    String[] longer = new String[array.length + 1]; 
    System.arraycopy(array, 0, longer, 0, array.length); 
    longer[array.length] = push; 
    return longer; 
} 
+4

Recomiendo encarecidamente el uso de este método. Para las matrices realmente simples y pequeñas no impondrá problemas, pero para una matriz mediana o pesada esto hará que el sistema itere sobre la matriz cada vez que se agrega un elemento. Si tiene una matriz de más de 100 elementos y desea agregar más 3 elementos, hará 303 operaciones. – Panthro

1

La bibliotecacontiene los métodos push (valores), pop(), shift() y unshift (valores).

Código ejemplo:

import com.github.underscore.$: 
import java.util.*; 

public class Main { 
    public static void main(String[] args) { 
     List<String> strings = Arrays.asList("one", "two", " three"); 
     List<String> newStrings = $.push(strings, "four", "five"); 
     // ["one", " two", "three", " four", "five"] 
     String newPopString = $.pop(strings).fst(); 
     // " three" 
     String newShiftString = $.shift(strings).fst(); 
     // "one" 
     List<String> newUnshiftStrings = $.unshift(strings, "four", "five"); 
     // ["four", " five", "one", " two", "three"] 
    } 
} 
Cuestiones relacionadas