2011-02-28 23 views
5

necesito algo de ayuda con respecto a la adición de los valores en una matrizanexar valores de forma dinámica en un largo [] array

por ejemplo

long[] s = new long[] {0, 1, 2}; 

cuando hago esto i instanciar una matriz con los valores

pero ¿cómo puedo agregar esto a la matriz anterior si tengo otro valor de

3, 4, 5 

a que sea como este

s = new long[] {1, 2, 3, 4, 5, 6}; 

he intentado la función System.arraycopy pero yo sólo soy capaz de overide la matriz y cuando intento agregar a ella, me sale una excepción de puntero nulo

Gracias

SOLUCIÓN

i utilizado este con un bucle for para poner en los valores de una vez por uno

 long[] tmp = new long[a.length + x.length]; 
    System.arraycopy(a, 0, tmp, 0, a.length); 
    System.arraycopy(x, 0, tmp, a.length, x.length); 
    a=tmp; 

Respuesta

8

No se pueden "agregar" elementos a una matriz en Java. La longitud de la matriz se determina en el momento de la creación y no puede cambiar dinámicamente.

Si realmente necesita un long[] la solución es crear una matriz más grande, copie sobre los elementos, y señalar la referencia a la nueva matriz, así:

long[] s = new long[] {0, 1, 2}; 
long[] toAppend = { 3, 4, 5 }; 

long[] tmp = new long[s.length + toAppend.length]; 
System.arraycopy(s, 0, tmp, 0, s.length); 
System.arraycopy(toAppend, 0, tmp, s.length, toAppend.length); 

s = tmp; // s == { 0, 1, 2, 3, 4, 5 } 

Sin embargo, es probable que quieren use un ArrayList<Long> para este propósito. En ese caso, puede agregar elementos usando el .add -metodo. Si elige esta opción, debe ser algo como

// Initialize with 0, 1, 2 
ArrayList<Long> s = new ArrayList<Long>(Arrays.asList(0L, 1L, 2L)); 

// Append 3, 4, 5 
s.add(3L); 
s.add(4L); 
s.add(5L); 


long[] longArray = new long[s.size()]; 
for (int i = 0; i < s.size(); i++) 
    longArray[i] = s.get(i); 
+0

gracias por la ayuda con el arraycopy estoy viendo la opción de arraylist – ben

+1

que muestra cómo utilizo el arraylist? Necesito que la salida sea larga [] para que la función de vibración de Android funcione – ben

+0

@aaioobe: Sé que los dispositivos móviles son cada vez más rápidos, pero si la API de Android espera una larga [] y no una lista {larga} es para un motivo: el envoltorio innecesario ** debe ** matar la perforación/batería/etc. de un dispositivo móvil. – Gugussee

1

anexar no es típicamente el tipo de operación que haría con matrices. Sugiero que use el objeto ArrayList, vea API, que siempre puede convertir a una matriz.

+0

gracias mirando en la opción ArrayList – ben

+0

buena suerte ... :) – posdef

+0

gracias leyendo su API ahora – ben

1

Ha creado una matriz de tamaño fijo igual a tres, no puede agregar más. Necesita copiar a una nueva matriz, con un nuevo tamaño. Ver Arrays class

long[] s = new long[] {0L, 1L, 2L}; 
    long[] l = Arrays.copyOf(s, 6); 
    l[3] = 3L; 
    l[4] = 4L; 
    l[5] = 5L; 
    System.out.println(Arrays.toString(l)); 

La salida es

[0, 1, 2, 3, 4, 5]

+0

hmm podría probar el método ArrayList ya que lo que he escrito es solo un ejemplo que podría necesitar agregar unos cientos de valores más en la matriz – ben

+0

@benjamin lee great. lo que te venga bien. Ya sabes las opciones ahora. :) – Nishant

+0

gracias por la ayuda :) – ben

0
long[] s = new long[] {0, 1, 2}; 
long[] s2=new long[]{3, 4, 5}; 
int len_s= s.length; 
s= Arrays.copyOf(s, len_s+s2.length); //extends range arrays 
System.arraycopy(s2,0,s1,len_s,s2.length); // copy three elements from s2 to s begin at s[len_s]; s2.length is number of elements s2. 
System.out.println(Arrays.toString(a1)); 

salida es

[0,1,2,3,4,5] 
0

Usted no se pueden agregar valores a la matriz dinámica Como el espacio de memoria se asigna al objeto de matriz en el momento de la inicialización, significa que se asigna una ubicación de memoria consecutiva predefinida.Por lo tanto, necesitamos usar la lista de arreglos porque utiliza la estructura de datos de la lista vinculada internamente y le permite agregar/eliminar/ordenar fácilmente sin desperdiciar espacio en la memoria.

Cuestiones relacionadas