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