Groovy List
、ArrayList
とObject Array
の違いを理解しようとしていましたが、実際の(単純な)例は見つかりませんでした。 Array
やList
では不可能なArrayList
で何ができるのでしょうか。 Arrayはオブジェクトの固定シーケンスであることを理解しています。 this 、 this 、および this をJavaで見て理解しようとしました)そこで言及されたポイント。
私は私の問題を明確に説明していることを望みますが、私がポイントを明確にしていないか、完全に欠落している場合はお知らせください。誰かが私を正しい方向に向けることができますか?ありがとうございました!
はい、Array
は固定サイズのデータ構造です。保持できる要素を説明する型を持つと宣言され、その型は共変です( 共変と反変についてはこちらを参照 )。 Array
は実行時にその型を認識しており、Array
に不適切なものを配置しようとすると、例外が発生します。
Groovyでは、配列は低レベルで柔軟性がない(固定サイズ)ため、実際には慣用的ではありません。 Javaとの相互運用がサポートされています。通常、Groovyを使用する人はList
よりもArray
を好みます。 Groovyは違いをスムーズにしようとします。たとえば、size
でArray
メソッドを使用して要素の数を取得できます(ただし、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 LinkedList と LinkedList <>をArrayList <>で使用する場合 の質問はすでにいくつかあり、これらはLinkedList
とArrayList
の違いをカバーしています。
ArrayList
とLinkedList
の違いを見つけることができます。これらはList
(interface)の実装です。各実装には異なるメソッドがあります。これらのメソッドは次の場所にあります。
ListはArrayListと比較できません。
List
はインターフェースであり、ArrayList
は特定の特性を持つ実装です。他のすべてのプログラミング言語と同様に、Javaには特定の問題のための特定のコンテナがあります。最初の把握はここから取得できます: http://docs.Oracle.com/javase/1.5。 0/docs/guide/collections/overview.html