を使用TreeMap
して custom を提供するのは簡単です。したがって、マップに追加されたオブジェクトComparator
によって提供されるセマンティクスをオーバーライドします。ただし、この方法では制御できません。ハッシュ値と等価性チェックを提供する関数は「サイドロード」できません。Comparable
HashMap
HashMap
インターフェイスを設計し、これを(または新しいクラスに)改造するのは簡単で便利だと思いますか?より良い名前を除いて、このようなもの:
interface Hasharator<T> {
int alternativeHashCode(T t);
boolean alternativeEquals(T t1, T t2);
}
class HasharatorMap<K, V> {
HasharatorMap(Hasharator<? super K> hasharator) { ... }
}
class HasharatorSet<T> {
HasharatorSet(Hasharator<? super T> hasharator) { ... }
}
大文字と小文字Map
を区別しない問題には、簡単な解決策があります。
new HasharatorMap(String.CASE_INSENSITIVE_EQUALITY);
これは実行可能でしょうか、それともこのアプローチに根本的な問題があると思いますか?
このアプローチは、既存の (JRE 以外の) ライブラリで使用されていますか? (グーグルを試してみましたが、うまくいきませんでした。)
編集: hazzen によって提示された素晴らしい回避策ですが、これは私が回避しようとしている回避策です... ;)
編集: タイトルを変更して、「コンパレーター」について触れないようにしました。これは少し混乱したと思います。
編集:パフォーマンスに関連して受け入れられた回答。より具体的な答えが欲しいです!
編集: 実装があります。以下の受け入れられた回答を参照してください。
編集:最初の文を言い換えて、それが私が求めているサイドローディングであることをより明確に示します(順序付けではありません。順序付けは HashMap に属しません)。