ハッシュマップを作成しましたが、デバッグすると、キーが重複していることがわかりました。キーのhashCode()
&をオーバーライドし
ませんでした-マップ検索のパフォーマンスにどのように影響するのでしょうか?equals(Object obj)
Object1
private HashMap<Object1,Object2> map = new HashMap<Object1,Object2>();
ハッシュマップを作成しましたが、デバッグすると、キーが重複していることがわかりました。キーのhashCode()
&をオーバーライドし
ませんでした-マップ検索のパフォーマンスにどのように影響するのでしょうか?equals(Object obj)
Object1
private HashMap<Object1,Object2> map = new HashMap<Object1,Object2>();
Map内に重複するキーを持つことはできません。同じように「見える」異なるキーがあります (おそらくそれらのtoString()
?に基づいています) 。equals()
hashCode()
これは、マップからすべての値を取得するには、作成したすべてのキーを保持してどこかに保存する必要があることを意味します。これは、マップの目的を無効にします。
概要:
と をオーバーライドequals()
してからhashCode()
、キーと値のペアを Map に入れます。
キーを重複させることはできませんが、値を重複させることはできます。キーと値に混乱している可能性があります。
実際にはパフォーマンスが低下することはありませんが (逆に言えば)、オブジェクトが重複していると見なされることはありません。
各インスタンスを異なるキーとして表示する場合は、equals および hashCode メソッドをオーバーライドしないでください。ただし、これは、マップ内の値を取得するためにまったく同じインスタンスが必要になることを意味します。
別のインスタンス (同じ ID など) で値を取得する場合は、メソッドをオーバーライドする必要があります。
しかし、問題は実際にはパフォーマンスの問題ではありません。
重複したキーを取得するにはどうすればよいですか? equals()
どちらもオーバーライドしなかっhashcode()
たため、「複製されたオブジェクト」とは言えません。これがまさにこれらのメソッドの目的だからです。Object.equals()
おそらくデバッグして異なる値を見たことがあるでしょうが、JVM の場合、デフォルトとObject.hashcode()
(実際には最も近いスーパークラス) に基づいてそれらは等しくありません。