Groovy-List、ArrayList和Object Array的区别
Groovy- Difference between List, ArrayList and Object Array
我想了解 groovy List
、ArrayList
和 Object Array
之间的区别,但找不到真正的(简单的)示例。比如,我们可以用 Array
做什么,而不能用 List
或 ArrayList
做什么?我知道 Array 是一个固定的对象序列。顺便提一下,我看过 java 中的 this , this and this 并试图理解那里提到的要点。
我希望我能清楚地描述我的问题,但如果我不清楚或完全没有抓住要点,请告诉我。有人能指出我正确的方向吗?谢谢!
List
是接口,ArrayList
是具有某些特性的实现。与所有其他编程语言一样,Java 也有针对特定问题的特定容器。可以在这里初步掌握:http://docs.oracle.com/javase/1.5.0/docs/guide/collections/overview.html
您可以找到 ArrayList
和 LinkedList
之间的区别,这些是 List
(接口)的实现。每个实现都有不同的方法。您可以在以下位置查看这些方法:
List 无法与 ArrayList 进行比较。
是的,Array
是一个固定大小的数据结构。它被声明为具有描述它可以容纳哪些元素的类型,该类型是协变的(see here for covariant vs contravariant)。 Array
在运行时知道它的类型,并且试图在 Array
中放置任何不合适的东西将导致异常。
在 Groovy 中,数组由于低级和不灵活(固定大小)并不是真正的惯用。它们支持与 Java 的互操作。通常使用 Groovy 的人更喜欢 List
而不是 Array
。 Groovy 确实试图消除差异,例如,您可以在 Array
上使用 size
方法来获取元素的数量(即使在 Java 中您会有到
使用 length
属性).
(在 Ruby 中,最类似于列表的数据结构称为 Array
,因此人们从 Rails 来到 Groovy 或 Grails 时没有 Java 背景往往会导致混淆的命名法。)
java.util.List
是一个接口,描述了由不同种类的列表实现的基本列表操作。列表使用通用类型参数来描述它们可以容纳的内容(类型在 Groovy 中是可选的)。列表上的泛型类型是不变的,而不是协变的。通用集合依靠编译时检查来强制类型安全。
在 Groovy 中,当您使用文字语法 (def mylist = []
) 创建列表时,java.util.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 and When to use LinkedList<> over ArrayList<>?,涵盖了LinkedList
和ArrayList
之间的区别。
我想了解 groovy List
、ArrayList
和 Object Array
之间的区别,但找不到真正的(简单的)示例。比如,我们可以用 Array
做什么,而不能用 List
或 ArrayList
做什么?我知道 Array 是一个固定的对象序列。顺便提一下,我看过 java 中的 this , this and this 并试图理解那里提到的要点。
我希望我能清楚地描述我的问题,但如果我不清楚或完全没有抓住要点,请告诉我。有人能指出我正确的方向吗?谢谢!
List
是接口,ArrayList
是具有某些特性的实现。与所有其他编程语言一样,Java 也有针对特定问题的特定容器。可以在这里初步掌握:http://docs.oracle.com/javase/1.5.0/docs/guide/collections/overview.html
您可以找到 ArrayList
和 LinkedList
之间的区别,这些是 List
(接口)的实现。每个实现都有不同的方法。您可以在以下位置查看这些方法:
List 无法与 ArrayList 进行比较。
是的,Array
是一个固定大小的数据结构。它被声明为具有描述它可以容纳哪些元素的类型,该类型是协变的(see here for covariant vs contravariant)。 Array
在运行时知道它的类型,并且试图在 Array
中放置任何不合适的东西将导致异常。
在 Groovy 中,数组由于低级和不灵活(固定大小)并不是真正的惯用。它们支持与 Java 的互操作。通常使用 Groovy 的人更喜欢 List
而不是 Array
。 Groovy 确实试图消除差异,例如,您可以在 Array
上使用 size
方法来获取元素的数量(即使在 Java 中您会有到
使用 length
属性).
(在 Ruby 中,最类似于列表的数据结构称为 Array
,因此人们从 Rails 来到 Groovy 或 Grails 时没有 Java 背景往往会导致混淆的命名法。)
java.util.List
是一个接口,描述了由不同种类的列表实现的基本列表操作。列表使用通用类型参数来描述它们可以容纳的内容(类型在 Groovy 中是可选的)。列表上的泛型类型是不变的,而不是协变的。通用集合依靠编译时检查来强制类型安全。
在 Groovy 中,当您使用文字语法 (def mylist = []
) 创建列表时,java.util.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 and When to use LinkedList<> over ArrayList<>?,涵盖了LinkedList
和ArrayList
之间的区别。