web-dev-qa-db-ja.com

Groovy-リスト、ArrayList、オブジェクト配列の違い

Groovy ListArrayListObject Arrayの違いを理解しようとしていましたが、実際の(単純な)例は見つかりませんでした。 ArrayListでは不可能なArrayListで何ができるのでしょうか。 Arrayはオブジェクトの固定シーケンスであることを理解しています。 thisthis 、および this をJavaで見て理解しようとしました)そこで言及されたポイント。

私は私の問題を明確に説明していることを望みますが、私がポイントを明確にしていないか、完全に欠落している場合はお知らせください。誰かが私を正しい方向に向けることができますか?ありがとうございました!

12
user1207289

はい、Arrayは固定サイズのデータ​​構造です。保持できる要素を説明する型を持つと宣言され、その型は共変です( 共変と反変についてはこちらを参照 )。 Arrayは実行時にその型を認識しており、Arrayに不適切なものを配置しようとすると、例外が発生します。

Groovyでは、配列は低レベルで柔軟性がない(固定サイズ)ため、実際には慣用的ではありません。 Javaとの相互運用がサポートされています。通常、Groovyを使用する人はListよりもArrayを好みます。 Groovyは違いをスムーズにしようとします。たとえば、sizeArrayメソッドを使用して要素の数を取得できます(ただし、Javaではlengthプロパティを使用する必要があります)。

(Rubyリストに最も近いデータ構造はArrayと呼ばれるため、Railsなしで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 LinkedListLinkedList <>をArrayList <>で使用する場合 の質問はすでにいくつかあり、これらはLinkedListArrayListの違いをカバーしています。

15
Nathan Hughes

ArrayListLinkedListの違いを見つけることができます。これらはList(interface)の実装です。各実装には異なるメソッドがあります。これらのメソッドは次の場所にあります。

* メソッドLinkedList

* メソッドArrayList

ListはArrayListと比較できません。

5
Kevin F

Listはインターフェースであり、ArrayListは特定の特性を持つ実装です。他のすべてのプログラミング言語と同様に、Javaには特定の問題のための特定のコンテナがあります。最初の把握はここから取得できます: http://docs.Oracle.com/javase/1.5。 0/docs/guide/collections/overview.html

1
cfrick