toString()
クラスのメソッドがObject
オブジェクトのハッシュ コードを返す場合、hashCode()
Object クラスのメソッドは何をしますか? オブジェクトのハッシュ コードも返す場合、メソッドによって返されるtoString()
値がメソッドによって返される値と同じなのはなぜhashCode()
ですか?
2 に答える
Object は、他のすべての Java クラスの基本クラスです。これは、すべてのクラスが暗黙的toString
に and をサポートすることを意味しますhashCode
。しかし、多くのクラスは一方または両方をオーバーライドするため、Object のデフォルトの実装を取得しません。
たとえばtoString
、Double オブジェクトの場合は浮動小数点数の意味のあるデフォルト形式のバージョンが返されますが、double オブジェクトの場合hashCode
は float 値のハッシュ バージョンが返され、ハッシュ テーブルでのキー検索に適しています。
toString
主にデバッグ印刷をサポートすることを目的としています。返されるのは、開発者がその特定のオブジェクト クラスに対して「最も理にかなっている」と感じたものです。(Object の場合、扱うことはあまりないので、hashCode 値のテキスト表現と組み合わせたクラス名が使用されます。) hashCode
一方、 はハッシュベースの検索を容易にすることを目的としているため、開発者は比較が異なるオブジェクトでは異なる可能性が高いが、比較が等しいオブジェクトでは同一であることが保証されている数値。
ここにいくつかのポイント:
toString()
className@hashCode を返します
hashCode()
クラスの hashCode のみを返します
hashCode はコレクション (セットとマップ) に使用されます。これは Java がそれらを検索する際のパフォーマンスを向上させる方法です。コレクション フレームワークの使用方法を知っているかどうかはわかりません。しかし、彼らはこのように働きます
コレクション内のオブジェクトを検索しようとすると、オブジェクトのハッシュ コードの検索が開始され、一致するオブジェクトが見つかると、等しいオブジェクトの検索が開始されます。
そうすれば、1000 個のオブジェクトのコレクションを検索して各オブジェクトを検索と比較しようとする代わりに、ハッシュ コード (たとえば 50 のみ) を検索し、次にこのハッシュ コードでオブジェクトを検索します。
そこには equals() および hashCode() メソッドを操作する方法に関する多くのルールがありますが、いずれにしても簡単です