Groovy-разница между списком, ArrayList и массивом объектов

Я искал, чтобы понять разницу между Groovy List, ArrayList и Object Array, но не смог найти реальных (простых) примерах. Например, что мы можем сделать с Array , это не может быть сделано с помощью List или ArrayList? Я понимаю, что массив-это фиксированная последовательность объектов. Просто чтобы упомянуть, что я посмотрел на этой , этой и этой в java и пытается понять точки, упомянутые там.

надеюсь, я описываю свою проблему ясно, но дайте мне знать, если я не понимаю или полностью упускаю суть. Кто-нибудь может указать мне правильное направление? Спасибо!

3 ответов


да, массив-это структура данных с фиксированным размером. Он объявлен как имеющий тип, который описывает, какие элементы он может содержать, этот тип ковариантен (см. здесь для ковариантного против контравариантным). Массив знает свой тип во время выполнения, и попытка поместить что-либо неуместное в массив приведет к исключению.

в Groovy массивы на самом деле не идиоматичны из-за того, что они низкоуровневые и негибкие (фиксированный размер), они поддерживаются для взаимодействия с Java. Обычно люди, использующие Groovy, предпочитают списки массивам. Groovy пытается сгладить различия, например, вы можете использовать метод size для массивов, чтобы получить количество элементов, хотя в Java вам придется использовать свойство length.

(в Ruby структура данных, наиболее похожая на список, называется Array, поэтому люди, приходящие в Groovy или Grails из Rails без фона Java, имеют тенденцию переносить номенклатуру с путаницей.)

java.утиль.Список-это интерфейс, который описывает основные операции списка, реализуемые различными типами списков. Списки используют параметры универсального типа для описания того, что они могут содержать (с типами, необязательными в Groovy). Списки не являются ковариантными, из-за стирания типа. Общие коллекции полагаются на компилятор для обеспечения безопасности типов.

в Groovy при создании списка с использованием буквального синтаксиса (def mylist = []) java.утиль.ArrayList является реализация вы получить:

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

чтобы создать массив, вы должны добавить as (type)[] в декларации:

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

есть уже несколько вопросов,ArrayList Vs LinkedList и когда использовать LinkedList над ArrayList?, которые охватывают различия между LinkedList и ArrayList.


вы можете найти различия между ArrayList и LinkedList, Это реализации List(интерфейс). Каждая реализация имеет разные методы. Вы можете увидеть эти методы в:

*Методы Класса LinkedList

*Методы ArrayList

список нельзя сравнить с ArrayList.


List является интерфейсом и ArrayList реализация с определенными характеристиками. Как и все другие языки программирования, Java также имеет определенные контейнеры для проблем с сертификатами. Вы можете получить первоначальное представление здесь:http://docs.oracle.com/javase/1.5.0/docs/guide/collections/overview.html