HashMapは下で配列を使用するため、配列を正しく使用するよりも高速になることはありません。
Random.nextInt()
配列をテストするために配列を使用しても、結果にバイアスがかかります。配列が非常に遅い理由は、配列アクセス自体ではなく、等号比較によるものです。
はインターフェースをArrayList
実装し、 はインターフェースを実装します。したがって、本当の問題は、いつ List を使いたいのか、そしていつ Map を使いたいのかということです。これは、Java API ドキュメントが大いに役立つところです。List
HashMap
Map
リスト:
順序付きコレクション (シーケンスとも呼ばれます)。このインターフェースのユーザーは、各要素がリスト内のどこに挿入されるかを正確に制御できます。ユーザーは整数インデックス (リスト内の位置) で要素にアクセスし、リスト内の要素を検索できます。
地図:
キーを値にマップするオブジェクト。マップに重複キーを含めることはできません。各キーは、最大で 1 つの値にマップできます。
リスト インターフェイス(ArrayList)
は、インデックスを使用してアクセスするオブジェクトの順序付けられたコレクションであり、配列によく似ています ( の場合ArrayList
、名前が示すように、バックグラウンドでの単なる配列です。ArrayList
保持したい場合は を使用します)並べ替えられた順序 (追加された順序、またはオブジェクトを追加するときに指定したリスト内の位置)。
実装では、キー オブジェクトのHashMap
ハッシュ値を使用して格納場所を特定するため、値の順序は保証されません。ただし、これを提供できる Java API の他のクラスがあります。たとえばLinkedHashMap
、キーと値のペアを格納するためにハッシュ テーブルを使用するだけでなく、追加された順序でキーのリスト (LinkedList) も保持するため、追加された順序でいつでもアイテムにアクセスできます (必要な場合)。
配列を使用する場合
配列を決して過小評価しないでください。ほとんどの場合、オブジェクトのリストを使用する必要がある場合、ベクトルまたはリストの使用を考える傾向があります。ただし、コレクションのサイズが既知であり、変更されない場合は、配列を潜在的なデータ構造と見なすことができます。ベクトルやリストよりも配列の要素にアクセスする方が高速です。必要なのはインデックスだけなので、これは明らかです。追加の get メソッド呼び出しのオーバーヘッドはありません。
場合によっては、上記のアプローチを組み合わせて使用することが最適な場合があります。たとえば、特定のニーズに合わせて HashMap の ArrayList を使用できます。