2009-06-08 6 views
0
HashMap<Pair<Class<T>,Boolean>,String> abc = new HashMap<Pair<Class<T>,Boolean>,String>(); 

ここでは2つのアプローチがあります。キー{class、Boolean} - > {string}を作成するか、これを行うこともできます。複合キーv/s 2レベルのインダイレクション

{クラス} - > {ブール、文字列}

第1のアプローチは、長所と短所がここに何...第二のアプローチは、2を有している間接の1つのレベルを有しますか? 2番目のアプローチは悪いですか?

+0

マップが関数であるので、あなたが望むことをやるための最も自然な方法は、私たちが知らないビジネスロジックに依存するので、何をしていますか? – akappa

+0

クライアントは値(文字列)にアクセスする必要があり、クエリ速度は5000 /秒です。 Map 、string>またはMap >のいずれかです。 – user117736

+0

クラスは何を表していますか?実際のクラスそのものでこれを行うことは可能ですか? –

答えて

2

理想的には、問題/解決策ドメインにとって自然なことが、理想的な選択であることが理想的です。キー<クラス、ブール>はドメイン内の何かを表しますか? ブール値、文字列>はドメイン内のすべてのものを表しますか? 1レベルまたは2レベルの間接参照を使用すると、最終的に非表示にする実装の詳細になる可能性があります。

しかし、純粋にパフォーマンスの決定であれば、他のすべてのものは同等です(たとえば、アクセスパターンは一方向または他のものに優先しません、良いハッシュ関数、スパースマップなど)、私はHashMapと思うでしょう< Key < X、Y >、Z>はHashMapより高速です< X、地図< Y、Z > > - 私は、より大きいHashMapで1ルックアップが小さいマップで2ルックアップより速いと思っています。

あなたがブールの鍵を持っているので、また、代わりに2つのHashMapのテーブル(真と偽のための1つに1つ)と、いくつかの三項演算子(:)魔法を考えてみます?

final Map<Class, String> falseMap = new HashMap<Class, String>(); 
final Map<Class, String> trueMap = new HashMap<Class, String>(); 

final String s = ((booleanKey ? trueMap: falseMap).get(classKey));