![](/img/trans.png)
[英]What is the difference between ArrayList<?>, ArrayList, ArrayList<Object>?
[英]Groovy- Difference between List, ArrayList and Object Array
是的, Array
是具有固定大小的數據結構。 它被聲明為具有描述它可以容納哪些元素的類型,該類型是協變的( 請參閱此處了解協變與逆變)。 Array
在運行時知道它的類型,試圖在Array
放入任何不合適的東西都會導致異常。
在 Groovy 中,由於低級和不靈活(固定大小),數組並不是真正慣用的。 它們支持與 Java 的互操作。 通常,使用 Groovy 的人更喜歡List
不是Array
。 Groovy 確實嘗試消除差異,例如,您可以在Array
上使用size
方法來獲取元素的數量(即使在 Java 中您必須使用length
屬性)。
(在 Ruby 中,最類似於列表的數據結構稱為Array
,因此沒有 Java 背景的從 Rails 轉到 Groovy 或 Grails 的人往往會沿用命名法,從而導致混淆。)
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 LinkedList以及何時使用 LinkedList<> 而不是 ArrayList<>? ,其中涵蓋了LinkedList
和ArrayList
之間的差異。
您可以找到ArrayList
和LinkedList
之間的差異,這些是List
(接口)的實現。 每個實現都有不同的方法。 您可以在以下位置看到這些方法:
* 方法鏈表
List 無法與 ArrayList 進行比較。
List
是一個接口,而ArrayList
是一個具有某些特性的實現。 與所有其他編程語言一樣,Java 也為某些問題提供了某些容器。 您可以在這里初步掌握: http : //docs.oracle.com/javase/1.5.0/docs/guide/collections/overview.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.