【问题标题】:Groovy- Difference between List, ArrayList and Object ArrayGroovy - List、ArrayList 和 Object Array 之间的区别
【发布时间】:2015-04-13 13:16:12
【问题描述】:

我希望了解 groovy ListArrayListObject Array 之间的区别,但找不到真实(简单)的示例。比如,我们可以用 Array 做什么,而不能用 ListArrayList 做?我知道 Array 是一个固定的对象序列。顺便提一下,我在 java 中查看了 thisthisthis 并试图理解那里提到的要点。

我希望我清楚地描述了我的问题,但如果我不清楚或完全没有抓住重点,请告诉我。有人可以指出我正确的方向吗?谢谢!

【问题讨论】:

    标签: java arrays arraylist groovy


    【解决方案1】:

    是的,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 中类型是可选的)。 Lists 上的泛型类型是不变的,而不是协变的。泛型集合依赖编译时检查来强制类型安全。

    在 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 LinkedListWhen to use LinkedList<> over ArrayList<>?,涵盖了LinkedListArrayList之间的区别。

    【讨论】:

    • 感谢您的详细解释。我会通过它并尝试理解。
    【解决方案2】:

    您可以找到ArrayListLinkedList 之间的区别,这些是List(接口)的实现。每个实现都有不同的方法。您可以在以下位置查看这些方法:

    *Methods LinkedList

    *Methods ArrayList

    List 不能与 ArrayList 进行比较。

    【讨论】:

    • 感谢您的链接。我会通过它们。
    【解决方案3】:

    List 是一个接口,ArrayList 是一个具有某些特性的实现。像所有其他编程语言一样,Java 也有某些容器来解决某些问题。你可以在这里初步掌握:http://docs.oracle.com/javase/1.5.0/docs/guide/collections/overview.html

    【讨论】:

      猜你喜欢
      • 2013-07-11
      • 2015-11-08
      • 1970-01-01
      • 2018-08-30
      • 1970-01-01
      • 2014-08-18
      • 1970-01-01
      • 2011-06-03
      • 1970-01-01
      相关资源
      最近更新 更多