1

I need a class that implements Iterable, and does not need to be safe for concurrent usage. Of the various options, such as LinkedList, HashSet, ArrayList etc, which is the lightest-weight?

To clarify the use-case, I need to be able to add a number of objects to the Iterable (typically 3 or 4), and then something else needs to iterate over it.

4

4 に答える 4

5

配列リスト。Javadoc から

追加操作は償却された定数時間で実行されます。つまり、n 個の要素を追加するには O(n) 時間が必要です。他のすべての操作は線形時間で実行されます (大まかに言えば)。定数係数は、LinkedList の実装に比べて低くなります。

于 2009-10-13T17:54:27.797 に答える
2

それは、「最軽量」の意味に完全に依存します。どのような操作をどのくらいの頻度で行う必要がありますか? 最終的なサイズは事前にわかりますか?実行時間やメモリを節約しようとしていますか?

zkarthikArrayListは非常に多くの場合良い選択であることに同意します...しかし、たとえば、大きなコレクションを作成してから最初の要素を繰り返し削除する場合、動作が非常に悪くなります。非常に多くの異なるコレクションが存在するのには十分な理由があります。異なる状況で異なるパフォーマンス特性を持っているからです。

于 2009-10-13T17:54:45.487 に答える
1

それらはすべて非常に異なる機能と動作を持っているため、それらをどのように使用するかに基づいて選択する必要があります. たとえば、ランダム アクセスと高い局所性を実現するには、ArrayList を使用します。順序付けされていない高速な挿入とクエリが必要な場合は、HashSet を使用します。

于 2009-10-13T17:55:51.310 に答える
0

「軽量」が「最高のパフォーマンス」を意味する場合、コレクションがどのように使用されるかを理解せずに質問に答えることはほとんど不可能です。あなたが私たちにそう言ったのは、同時使用をサポートする必要はないということだけですが、質問に答える希望を持っているためには、次のようなことを知る必要があります

  • コレクションに保存されるオブジェクトの数(平均)
  • 読み取りおよび書き込みアクセスの相対頻度はどれくらいですか
  • ランダムアクセスが必要ですか
  • 注文されたアクセスが必要ですか

多くの人がArrayListが最適かもしれないと示唆しています。ただし、(おそらくEffective Java 2ndエディションで)読んだことを思い出しているようです。特定の使用パターンでは、ランダムアクセスのペナルティが発生しないため、 QueueはListよりもパフォーマンスが優れています。つまり、リストからアイテムを任意の順序で追加/削除できますが、キュー内のアイテムは特定の順序でのみ追加/削除できます(つまり、テールに追加し、ヘッドから削除します)。

于 2009-10-13T18:07:44.023 に答える