RGB カラーをキーとして HashMap を作成したいと考えています。最高のパフォーマンスを得るには、どのように保管すればよいですか? つまり、ハッシュマップの「速度」はキーのオブジェクトタイプをどのように参照するのでしょうか?
Integer (018052175)各トリプレットが RGB の 1 つである場所String (1234AF)を HEX として使用するか、独自の Color クラスを使用する必要がありint r, g, bますか? 最速の実装は何ですか?
ハッシュマップの速度は、hashCodeおよびequals関数のいくつかの重要なプロパティによって制約されます。
hashCode値をバケットに分散するのはどれくらいうまくいくか、そしてaのhashCode機能Stringは非常に優れており、Stringその結果をキャッシュしてパフォーマンスを向上させます。ただし、等価性チェックは。よりも長くなる場合がありIntegerます。
このIntegerクラスの実装は速度の点で非常に難しいですhashCodeが、同じような色のハッシュコードは互いに近いため、Integersとの衝突が増える可能性があります。
Color と同じくらい高速ですがInteger、最もわかりやすいものでもあります。これらの3つの表現のいずれかを選択すると、パフォーマンスが大幅に低下して目に見える違いが生じるのではないかと真剣に疑っています。そのため、最もわかりやすい選択を行ってから、必要に応じてプロファイルを作成することをお勧めします。
唯一の違いは hashcode/equals 関数の速度であり、Integer が最も高速である必要がありますが、いずれにしてもボトルネックになる可能性は低いです。おそらく、コードの他の場所で最も便利なものを使用する必要があります。
HashMapに基づいてhashCode()おり、Integer.hashCode()可能な限り高速です(これは恒等関数です):
intこのオブジェクトが表すプリミティブ値と等しい、このオブジェクトのハッシュ コード値Integer。
したがって、Integer24 ビット RGB 値を表すことにします。Color.hashCode()しかし、それは同じくらい高速であることが判明し、 Colorclass は よりもはるかに表現力があり読みやすいため、代わりに class をInteger使用してください。Color
sを使用Integerし、で取得しますnew Color(r, g, b).getRGB()。
整数から色を取得するには、を使用しますnew Color(hashmap.get(index))。
Java には、Colorと呼ばれる色を格納するためのクラスが組み込まれています。
実際にボトルネックが見られない限り、最適化を行います(整数を使用してもそれほど高速ではないと思います)
Integer.hashCode()より速くはありませんColor.hashCode()。java.awt.ColorのhashCode実装 (Java 1.6):
/**
* Computes the hash code for this <code>Color</code>.
* @return a hash code value for this object.
* @since JDK1.0
*/
public int hashCode() {
return value;
}
equals両方とも同等です。したがって、あなたの場合Color、セマンティクスをよりよく伝えるので使用します。