2015-02-12 22 views
6

Stavo cercando di capire la differenza tra il fantastico List, ArrayList e Object Array ma non è stato possibile trovare esempi reali (semplici). Come, cosa possiamo fare con Array, che non può essere fatto con List o ArrayList? Capisco che l'array è una sequenza fissa di oggetti. Solo per dire che ho guardato a this, this e this in java e cercando di capire i punti menzionati lì.Groovy- Differenza tra elenco, lista array e array di oggetti

Spero di descrivere il mio problema in modo chiaro, ma fammi sapere se non sono chiaro o se non mi manca completamente il punto. Qualcuno può indicarmi la giusta direzione? Grazie!

risposta

10

Sì, un array è un datastructure con una dimensione fissa. Viene dichiarato di avere un tipo che descrive quali elementi può contenere, quel tipo è covariante (see here for covariant vs contravariant). L'array conosce il suo tipo in fase di esecuzione e tentare di inserire qualcosa di inappropriato nell'array provoca un'eccezione.

In Groovy gli array non sono veramente idiomatici a causa del basso livello e dell'inflessibilità (dimensione fissa), sono supportati per l'interoperabilità con Java. In genere le persone che utilizzano Groovy preferiscono le liste su array. Groovy cerca di appianare le differenze, ad esempio puoi usare il metodo di misura sugli array per ottenere il numero di elementi anche se in Java dovresti usare la proprietà length.

(In Ruby la struttura dei dati che assomiglia più da vicino una lista si chiama Array, quindi persone che vengono a Groovy o Grails da Rails senza un background Java tendono a riportare la nomenclatura con la confusione conseguente.)

java.util .Lista è un'interfaccia che descrive le operazioni di elenco di base implementate dai diversi tipi di elenchi. Gli elenchi utilizzano parametri di tipo generico per descrivere ciò che possono contenere (con tipi facoltativi in ​​Groovy). Le liste non sono covarianti, a causa della cancellazione dei tipi. Le raccolte generiche fanno affidamento sul compilatore per rafforzare la sicurezza del tipo.

In Groovy quando si crea un elenco utilizzando la sintassi letterale (def mylist = []) il java.util.ArrayList è l'implementazione si ottiene:

groovy:000> list = ['a', 'b', 'c'] 
===> [] 
groovy:000> list instanceof List 
===> true 
groovy:000> list.class 
===> class java.util.ArrayList 
groovy:000> list.class.array 
===> false 
groovy:000> list << 'd' 
===> [d] 
groovy:000> list[0] 
===> a 

Al fine di creare un array è necessario aggiungere al as (type)[] dichiarazione:

groovy:000> stringarray = ['a', 'b', 'c'] as String[] 
===> [a, b, c] 
groovy:000> stringarray.class 
===> class [Ljava.lang.String; 
groovy:000> stringarray.class.array 
===> true 
groovy:000> stringarray << 'd' 
ERROR groovy.lang.MissingMethodException: 
No signature of method: [Ljava.lang.String;.leftShift() is applicable 
for argument types: (java.lang.String) values: [d] 
groovy:000> stringarray[0] 
===> a 

ci sono già diverse domande, ArrayList Vs LinkedList e When to use LinkedList<> over ArrayList<>?, che coprono le differenze tra LinkedList e ArrayList.

+0

Grazie per la spiegazione dettagliata. Lo esaminerò e cercherò di capire. – user1207289

4

È possibile trovare le differenze tra ArrayList e LinkedList, queste sono implementazioni di List (interfaccia). Ogni implementazione ha diversi metodi. Potete vedere questi metodi:

* Methods LinkedList

* Methods ArrayList

lista non può essere paragonato con ArrayList.

+0

Grazie per i collegamenti. Li attraverserò. – user1207289