7

2 つのキーを持つマップが必要です。

Map2<String /*ssn*/, String /*empId*/, Employee> _employees;

私ができるように

_employees.put(e.ssn(), e.empId(), e)

以降

_employees.get1(someSsn);
_employees.get2(someImpId);

あるいは

_employees.remove1(someImpId);

なぜ2つに止めたいのか、それ以上にしないのか、おそらくそれが私が今必要としているケースだからです:-)しかし、タイプはタイプセーフであるために固定数のキーを処理する必要があります-タイプパラメータはできませんvararg :-)

なぜこれが悪い考えなのかについての指針やアドバイスをいただければ幸いです。

4

3 に答える 3

4

私が最初に考えたのは、これを行う最も簡単な方法は、2 つのマップを使用することだと思いました。

Map< String, Map< String,Employee> > _employees;

しかし、それがどのように見えるかというと、SSN または ID のいずれかで従業員を検索できるようにしたいだけです。では、2 つのマップを作成したり、最悪の場合、2 つのマップを含むクラスを作成したりすることを妨げるものは何ですか?

明確にするために、従業員が SSN と ID の組み合わせによって一意に識別される複合キーを探していますか?それとも、従業員を参照する 2 つの異なる方法を探していますか?

于 2008-11-22T08:56:54.480 に答える
4

メインキーは になると思うので、empIdそれをMapキーとしてempId--->を作成しEmployeeます。他のすべての一意の属性 (例: ) はセカンダリssnとして扱われ、別個の をルックアップ テーブルとして使用します(例: ---> )。MapempIdssnempId

この実装により、従業員を簡単に追加/削除できます。変更する必要があるのは 1 つMap、つまりempId--->だけだからですEmployee。その他Mapの は、必要な場合にのみ再構築できます。

于 2008-11-22T11:50:58.233 に答える
2

Spiffy フレームワークは、探しているものを正確に提供しているようです。Javadoc から:

2 次元ハッシュマップは、1 つではなく 2 つのキーを介して値を参照できるようにする HashMap です。

関連するクラスはTwoDHashMapです。また、 ThreeDHashMapも提供します。

于 2008-11-22T17:57:48.147 に答える