代替のハッシュコードと等値演算を使用できるようにする HashMap クラス (または Map インターフェイス) の実装はありますか? Collections.sort(リスト、コンパレータ)。
必要なハッシュコードとイコール演算を提供するキーラッパーを作成することは、できれば避けたいと思います。
私の場合、次のようなものが必要なシナリオの 1 つ:
私の Web アプリケーションでは、リクエストごとに、場所/ISP およびその他のデータを読み込みます。コードのさまざまな部分 (サービス層とリポジトリ層) で、その要件に固有のキャッシュを「最小化」しました。
簡単なコード例を次に示します。
class GeoIpData{
private String countryName;
private String state;
private String city;
private String isp;
@Override
public int hashCode() {
//countryName hashCode
//state hashCode
//city hashCode
//isp hashCode
}
@Override
public boolean equals(Object obj) {
// compare countryName
// compare state
// compare city
// compare isp
}
}
Map<GeoIpData,#Type1> fullCache = ... //This cache needs to be unique per countryName,state,city and isp
Map<GeoIpData,#Type2> countryCache = ... //This cache needs to be unique per countryName
Map<GeoIpData,#Type2> ispCache = ... //This cache needs to be unique per countryName,isp
これを実現するには、上記の 3 つのマップに 3 つの異なる hashcode および equals メソッドが必要です。
fullCache:
hashCode -> GeoIpData.hashCode();
equals -> GeoIpData.equals(Object obj);
countryCache:
hashCode -> {countryName hashCode }
equals -> {compare countryName }
ispCache:
hashCode -> {countryName hashCode & isp hashCode }
equals -> {compare countryName & compare isp hashCode }