2

RGB カラーをキーとして HashMap を作成したいと考えています。最高のパフォーマンスを得るには、どのように保管すればよいですか? つまり、ハッシュマップの「速度」はキーのオブジェクトタイプをどのように参照するのでしょうか?

Integer (018052175)各トリプレットが RGB の 1 つである場所String (1234AF)を HEX として使用するか、独自の Color クラスを使用する必要がありint r, g, bますか? 最速の実装は何ですか?

4

6 に答える 6

3

ハッシュマップの速度は、hashCodeおよびequals関数のいくつかの重要なプロパティによって制約されます。

  • 計算がいかに簡単か、
  • hashCode値をバケットに分散するのはどれくらいうまくいくか、そして
  • 値が等しいかどうかを比較するのは簡単です

aのhashCode機能Stringは非常に優れており、Stringその結果をキャッシュしてパフォーマンスを向上させます。ただし、等価性チェックは。よりも長くなる場合がありIntegerます。

このIntegerクラスの実装は速度の点で非常に難しいですhashCodeが、同じような色のハッシュコードは互いに近いため、Integersとの衝突が増える可能性があります。

Color と同じくらい高速ですがInteger、最もわかりやすいものでもあります。これらの3つの表現のいずれかを選択すると、パフォーマンスが大幅に低下して目に見える違いが生じるのではないかと真剣に疑っています。そのため、最もわかりやすい選択を行ってから、必要に応じてプロファイルを作成することをお勧めします。

于 2012-12-20T16:32:13.567 に答える
2

唯一の違いは hashcode/equals 関数の速度であり、Integer が最も高速である必要がありますが、いずれにしてもボトルネックになる可能性は低いです。おそらく、コードの他の場所で最も便利なものを使用する必要があります。

于 2012-12-20T16:28:42.600 に答える
1

HashMapに基づいてhashCode()おり、Integer.hashCode()可能な限り高速です(これは恒等関数です):

intこのオブジェクトが表すプリミティブ値と等しい、このオブジェクトのハッシュ コード値Integer

したがって、Integer24 ビット RGB 値を表すことにします。Color.hashCode()しかし、それは同じくらい高速であることが判明し、 Colorclass は よりもはるかに表現力があり読みやすいため、代わりに class をInteger使用してください。Color

于 2012-12-20T16:28:54.187 に答える
0

sを使用Integerし、で取得しますnew Color(r, g, b).getRGB()

整数から色を取得するには、を使用しますnew Color(hashmap.get(index))

于 2012-12-20T16:30:27.437 に答える
0

Java には、Colorと呼ばれる色を格納するためのクラスが組み込まれています。

実際にボトルネックが見られない限り、最適化を行います(整数を使用してもそれほど高速ではないと思います)

于 2012-12-20T16:28:49.993 に答える
0

Integer.hashCode()より速くはありませんColor.hashCode()java.awt.ColorhashCode実装 (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、セマンティクスをよりよく伝えるので使用します。

于 2012-12-20T17:22:56.780 に答える