0

重複の可能性:
List と ArrayList とは?

どちらも使ったことがあるのですが、それぞれのメリットとデメリットを教えてください。主な違いは何ですか?また、どちらが使いやすいですか?

ありがとう。

4

4 に答える 4

3

Listクラスによって実装されるインターフェースです。のもう 1 つのよく知られた実装はです。ArrayList ListLinkedList

ArrayList一定時間のランダムアクセスをLinkedList提供し、非シーケンシャルアクセスには一定時間を提供します。を保持する変数を宣言するときはArrayList、次のようにインターフェイスを介してアクセスすることを検討してください。

List<ElementType> myList = new ArrayList<ElementType>();

これにより、残りのコードに影響を与えることなく、別の実装に切り替えることができます。

于 2012-09-04T02:16:10.393 に答える
2

Listリストであることの意味の契約を説明するだけです。そのため、これは具体的な実装ではなく、単なるインターフェイスです。リストはさまざまな方法で実装できます。

特に、ArrayListすべての要素を順番に格納するための動的配列を内部的に保持するがあります。またLinkedList、要素を二重にリンクされたリスト、つまり前のノードと次のノードへの参照を保持するノードのシーケンスとして格納するがあります。

Vectorもう1つは、その実装が動的配列に基づいているという点Listで非常に似ています。ArrayListただし、これは古いバージョンのJavaの遺物であり、完全に同期されることでスレッドセーフであることが保証されています。実際には、 new Vector<T>()は多かれ少なかれと同等Collections.synchronizedList(new ArrayList<T>())です。

を使用する理由Listは、リストをさまざまな方法で実装できるためです。そうは言っても、多くの場合、すべてに適用できるある種の一般的な動作が必要になりますList...ポリモーフィズムを参照してください。

于 2012-09-04T02:24:09.930 に答える
1

他のポスターはすでにあなたの質問の「何」の部分に答えました。それらの間で選択するときに考慮すべきいくつかの考慮事項。

ArrayListは、舞台裏で配列を使用します。したがって、インデックスによるアクセスは一定時間で実行できます。アレイに十分なスペースが割り当てられている場合は、追加を一定時間で行うこともできます。ただし、スペースがなくなると、ArrayListはより大きな配列を割り当て、古い配列値を新しい配列にコピーします。

LinkedListは、一緒にチェーンされたノードを使用します。インデックスによるアクセスには、リスト全体を歩く必要がある可能性があります(線形時間)。挿入に必要なのは、新しいノードを作成して最後に追加することだけです(テールポインターが維持されている場合は一定の時間になる可能性があります)。

したがって、「どちらが優れているか」は、それをどのように使用しているかによって異なります。正直なところ、私は2つの間のパフォーマンスの違いを測定したことはありませんが、それは考慮すべきことです。

于 2012-09-04T02:25:08.957 に答える
1

Listインターフェースであり、ArrayListはそのインターフェースの実装です。ArrayList は List であり、LinkedList、Stack、Vector なども同様です。

于 2012-09-04T02:16:53.980 に答える