Solución:
Si, un Array
es una estructura de datos con un tamaño fijo. Se declara que tiene un tipo que describe qué elementos puede contener, ese tipo es covariante (ver aquí para covariante vs contravariante). los Array
conoce su tipo en tiempo de ejecución y trata de poner cualquier cosa inapropiada en el Array
resultará en una excepción.
En Groovy, las matrices no son realmente idiomáticas debido a que son de bajo nivel e inflexibles (tamaño fijo). Son compatibles con la interoperación con Java. Normalmente, las personas que utilizan Groovy prefieren List
sobre Array
. Groovy intenta suavizar las diferencias, por ejemplo, puede utilizar el size
método en un Array
para obtener el número de elementos (aunque en Java tendrías que usar el length
propiedad).
(En Ruby, la estructura de datos que más se parece a una lista se llama Array
, por lo que las personas que llegan a Groovy o Grails desde Rails sin experiencia en Java tienden a transferir la nomenclatura con la confusión resultante).
java.util.List
es una interfaz que describe las operaciones de lista básicas que son implementadas por los diferentes tipos de listas. Las listas usan parámetros de tipo genérico para describir lo que pueden contener (los tipos son opcionales en Groovy). Los tipos genéricos de las listas son invariantes, no covariantes. Las colecciones genéricas se basan en la verificación en tiempo de compilación para hacer cumplir la seguridad de tipos.
En Groovy, cuando crea una lista usando la sintaxis literal (def mylist = []
) los java.util.ArrayList
es la implementación que obtienes:
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
Para crear una matriz, debe agregar as (type)[]
a la declaración:
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
Ya hay varias preguntas, ArrayList Vs LinkedList y ¿Cuándo usar LinkedList <> sobre ArrayList <> ?, que cubren las diferencias entre LinkedList
y ArrayList
.
Puedes encontrar diferencias entre ArrayList
y LinkedList
, estas son implementaciones de List
(interfaz). Cada implementación tiene diferentes métodos. Puedes ver estos métodos en:
* Métodos LinkedList
* Métodos ArrayList
La lista no se puede comparar con ArrayList.