2010-12-27 11 views
54

Sto cercando di aggiungere, rimuovere e fare riferimento agli elementi da un array creato nel mio file java principale, ma non riesco a trovare la sintassi corretta. In actionscript hanno push() e pop() per aggiungere e rimuovere elementi in un array, c'è un equivalente in Android?equivalente a push() o pop() per gli array?

+1

Che tipo di matrice avete? Puoi mostrarci un codice? – EboMike

+0

int [] intArray = new int {2, 3, 5, 8, 13}; come faccio a consultare intArray [3] o tutti gli elementi uno alla volta? – clayton33

risposta

5

È possibile utilizzare LinkedList. Ha metodi di sbirciare, sondare e offrire.

24

In Java un array ha una dimensione fissa (dopo l'inizializzazione), il che significa che non è possibile aggiungere o rimuovere elementi da un array.

int[] i = new int[10]; 

che questo frammento significa che la matrice di interi ha una lunghezza di 10. Non è possibile aggiungere un numero intero undicesimo, senza ri-assegnare il riferimento a un nuovo array, come il seguente:

int[] i = new int[11]; 

In Java il pacchetto java.util contiene tutti i tipi di strutture dati che possono gestire l'aggiunta e la rimozione di elementi da raccolte di tipo array. La classica struttura dati Stack ha metodi per push e pop.

+6

Una buona spiegazione, tuttavia, tieni a mente che Stack non è un granché di classe in quanto eredita da Vector, e come tale è completamente sincronizzato.Quindi, a meno che non sia necessaria la sincronizzazione, ArrayList o LinkedList è probabilmente un'opzione migliore. –

14

Per coloro che non hanno il tempo di rifattorizzare il codice per sostituire gli array con Collection s (ad esempio ArrayList), esiste un'alternativa. Diversamente Collection s, la lunghezza di un array non può essere cambiato, ma la matrice può essere sostituito, in questo modo:

array = push(array, item); 

Gli svantaggi sono che

  • l'intera matrice deve essere copiato ogni volta che si push, e
  • la matrice originale Object non è stata modificata, quindi è necessario aggiornare la/e variabile/e in modo appropriato.

Ecco il metodo push per String:
(è possibile creare più push metodi, uno per String, uno per int, ecc)

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; 
} 

Questa alternativa è più efficiente, più breve & più difficile da leggere:

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

Sconsiglio vivamente l'uso di questo metodo. Per array veramente semplici e piccoli non imporrà problemi, ma per un array medio o pesante questo farà sì che il sistema esegua un'iterazione sull'array ogni volta che viene aggiunto un oggetto. Se si dispone di una matrice di oltre 100 elementi e si desidera aggiungere altri 3 elementi, eseguirà 303 operazioni. – Panthro

1

La libreriacontiene i metodi push (valori), pop(), shift() e unshift (valori).

Codice esempio:

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"] 
    } 
} 
Problemi correlati