答案 1
是的,是具有固定大小的数据结构。它被声明为具有描述它可以容纳的元素的类型,该类型是协变的(请参阅此处的协变与逆变)。在运行时知道其类型,并尝试在 中放入任何不适当的内容将导致异常。Array
Array
Array
在Groovy中,数组并不是真正的惯用语,因为它是低级和不灵活的(固定大小)。它们支持与 Java 进行互操作。通常使用Groovy的人更喜欢.Groovy确实试图消除差异,例如,您可以在上使用的方法获取元素的数量(即使在Java中您必须使用该属性)。List
Array
size
Array
length
(在Ruby中,最接近列表的数据结构被称为,所以没有Java背景的Rails来到Groovy或Grails的人倾向于继承命名法,从而导致混乱。Array
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与LinkedList以及何时使用LinkedList<>而不是ArrayList<>?,它们涵盖了 和 之间的区别。LinkedList
ArrayList
答案 2
推荐
-
-
为什么 Array.newInstance(Class<?>, int) 不是通用的? 我的意思是,这有什么好的理由吗?该具有以下签名: 是否有任何充分的理由将返回值类型声明为 ?对我来说,这似乎非常不方便。
-
-
为什么我可以收集任意大数组的并行流,但不能收集顺序流? 在回答时,我遇到了一个奇特的功能。下面的代码按照我的假设工作(现有数组中的前两个值将被覆盖): 我很好奇为什么顺序流不会像并行流那样覆盖数组的元素。我搜索了一下,无法找到
-
Java JNI 调用的开销 首先让我说,这个问题更多的是出于好奇心,而不是真正的必要性。 我很想知道从Java执行JNI调用的开销是多少,比如说,与分配数组并使用for循环复制元素相比。 如果开销很大