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.
Grazie per la spiegazione dettagliata. Lo esaminerò e cercherò di capire. – user1207289