RGB カラーをキーとして HashMap を作成したいと考えています。最高のパフォーマンスを得るには、どのように保管すればよいですか? つまり、ハッシュマップの「速度」はキーのオブジェクトタイプをどのように参照するのでしょうか?
Integer (018052175)
各トリプレットが RGB の 1 つである場所String (1234AF)
を HEX として使用するか、独自の Color クラスを使用する必要がありint r, g, b
ますか? 最速の実装は何ですか?
ハッシュマップの速度は、hashCode
およびequals
関数のいくつかの重要なプロパティによって制約されます。
hashCode
値をバケットに分散するのはどれくらいうまくいくか、そしてaのhashCode
機能String
は非常に優れており、String
その結果をキャッシュしてパフォーマンスを向上させます。ただし、等価性チェックは。よりも長くなる場合がありInteger
ます。
このInteger
クラスの実装は速度の点で非常に難しいですhashCode
が、同じような色のハッシュコードは互いに近いため、Integer
sとの衝突が増える可能性があります。
Color
と同じくらい高速ですがInteger
、最もわかりやすいものでもあります。これらの3つの表現のいずれかを選択すると、パフォーマンスが大幅に低下して目に見える違いが生じるのではないかと真剣に疑っています。そのため、最もわかりやすい選択を行ってから、必要に応じてプロファイルを作成することをお勧めします。
唯一の違いは hashcode/equals 関数の速度であり、Integer が最も高速である必要がありますが、いずれにしてもボトルネックになる可能性は低いです。おそらく、コードの他の場所で最も便利なものを使用する必要があります。
HashMap
に基づいてhashCode()
おり、Integer.hashCode()
可能な限り高速です(これは恒等関数です):
int
このオブジェクトが表すプリミティブ値と等しい、このオブジェクトのハッシュ コード値Integer
。
したがって、Integer
24 ビット RGB 値を表すことにします。Color.hashCode()
しかし、それは同じくらい高速であることが判明し、 Color
class は よりもはるかに表現力があり読みやすいため、代わりに 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
、セマンティクスをよりよく伝えるので使用します。