簡體   English   中英

Groovy-List、ArrayList 和 Object Array 的區別

[英]Groovy- Difference between List, ArrayList and Object Array

我想了解 groovy ListArrayListObject Array之間的區別,但找不到真正(簡單)的例子。 比如,我們可以用Array做什么,而不能用ListArrayList做什么? 我知道 Array 是一個固定的對象序列。 只是提一下,我已經在 java 中查看了thisthisthis並試圖理解那里提到的要點。

我希望我能清楚地描述我的問題,但如果我不清楚或完全沒有抓住重點,請告訴我。 有人可以指出我正確的方向嗎? 謝謝你!

是的, 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<>? ,其中涵蓋了LinkedListArrayList之間的差異。

您可以找到ArrayListLinkedList之間的差異,這些是List (接口)的實現。 每個實現都有不同的方法。 您可以在以下位置看到這些方法:

* 方法鏈表

* 方法 ArrayList

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM