HashMap のキーとして配列を使用しようとしています。配列の長さは 2 であるため、基本的に 2 タプルとして機能します。カスタム 2 タプル クラスの実装は、最後の手段です。問題は、メモリの場所が異なる場合、同じ内容の配列を HashMap の別の場所にマップする必要があることです。Arrays.hashCode と Arrays.deepHashCode に hashCode 関数があることは知っていますが、これらを HashMap に使用できる方法はありますか。すでに述べたように、私は本当に独自のタプル クラスを実装したくありません。
3 に答える
このアプローチはお勧めし ません。
キーは不変でなければなりません。アレイを作成しない限り、危険が伴います。
Java はオブジェクト指向言語です。プリミティブの観点から考えすぎるのは間違いだと思います。オブジェクトに必要な適切な動作をカプセル化します。
独自のクラスを作成することはなぜそれほど抑圧的ですか? 最終手段?なぜこれがそんなに大したことなのか理解できません。それを作成し、不変にし、意図を明確に文書化し、先に進みます。
更新: この場合、既に欠陥のあるタプル クラスを持っているという事実によって、正しいことを行うことが妨げられることはありません。あなたは「何百ものクラス」を持っていると言いますが、もう 1 つ正しいことをしても壊れることはないと私は言います。コードは、あなたが行おうとしているような「実用的な」悪い決定の蓄積によって混乱してしまいます。この狭い問題に対する適切な解決策を作成することで、下品に追加しないことを決意し、そこからより良い答えに向けて取り組み始めます.
問題は、メモリの場所が異なる場合、同じ内容の配列を HashMap の別の場所にマップする必要があることです。
配列のメモリ位置が異なる場合、または配列の内容のメモリ位置が異なる場合は? 前者の場合は、おそらくIdentityHashMap
通常の の代わりに を使用できますHashMap
。ただし、後者の場合は、@ duffymoの答えに強く同意します:ペアを育てる;)
私は解決策を見つけました。配列を使用する代わりに、リストを使用しました。これが機能するのは、List が参照ではなく内容によって等価性を判断するためです。