1

次のような個別のオブジェクトのリストがあります。

Object1
Object2
...
ObjectN

各オブジェクトには がありTYPE、複数の値 (最大 10 ) のいずれかを指定できます。これは、同じタイプのオブジェクトがたくさんあることを意味します。

これらのオブジェクトは、タイプに関してマップされます。速度の点でより効果的な方法はどれですか? を持っているTreeMap<TYPE, List<Object>>か、 を持っていTreeMap<Object, TYPE>ます。使用されるマップは ではなく になりますHashMapTreeMapその理由は、この質問の目的を超えています。

を使用した場合、 のアクセス時間のためにHashMapを実装した方が速いと思います。ただし、どちらの方法を使用するとパフォーマンスが向上するかわかりません。Map<Object, String>O(1)ObjectTreeMap

注意として、オブジェクトの数は既知の間隔内になく、概算できません。

EDIT : 実装はこの選択に依存します。特定の型を持つすべての要素を取得して計算を行うか、すべての要素を取得してその型を取得してからデータを計算することができます。

どんな助けでも大歓迎です。

4

2 に答える 2

0

TreeMap は内部で赤黒木として実装されているため、その時間計算量はどの操作でも O(logn) になります。したがって、HashMap はインデックス アクセスの方が高速です。ただし、HashMap を使用すると、データを順序どおりに格納できないため、検索操作は O(n) になります。ドキュメントから:

赤黒木ベースの NavigableMap 実装。マップは、使用されるコンストラクターに応じて、キーの自然順序付けに従って、またはマップ作成時に提供される Comparator に従ってソートされます。この実装では、containsKey、get、put、remove 操作の保証された log(n) 時間コストが提供されます。

TreeMap<TYPE, List<Object>>または を使用しても違いはありませんTreeMap<Object, TYPE>。パフォーマンスの違いは、equals 関数と hashcode 関数の実装によって異なります。この場合、マッピング戦略の選択ではありません。ソフトウェア設計のニーズに最も適した方法を選択してください。

于 2013-11-08T10:17:11.043 に答える