2

我想创建一个以 RGB 颜色为键的 HashMap。我应该如何存储它们以获得最佳性能?我的意思是,哈希图的“速度”如何指代键的对象类型?

我应该使用Integer (018052175)每个三元组是 RGB 中的一个,String (1234AF)作为 HEX,还是使用自己的 Color 类int r, g, b?最快的实现可能是什么?

4

6 回答 6

3

hashCode哈希映射的速度受和equals函数的几个基本属性限制:

  • 计算多么容易,
  • hashCode将值分配到存储桶中的能力如何,以及
  • 比较相等的值是多么容易

a的hashCode功能String非常好,并String缓存其结果以提高性能。但是,相等性检查可能比 with 更长Integer

该类在速度方面Integer具有非常难以击败的实现hashCode,但是由于相似颜色的哈希码会彼此接近,因此您可能会与Integers 发生更多冲突。

Color 与 一样快Integer,但也是最具描述性的。我严重怀疑选择这三种表示中的一种会严重影响性能以产生明显的差异,因此我建议选择最具描述性的选择,然后在必要时进行配置。

于 2012-12-20T16:32:13.567 回答
2

唯一的区别是 hashcode/equals 函数的速度,Integer 应该是最快的,尽管它在任何情况下都不太可能成为瓶颈。您可能应该在代码的其他地方使用最方便的任何内容。

于 2012-12-20T16:28:42.600 回答
1

HashMap基于hashCode()并且Integer.hashCode()尽可能快地获得(它是一个恒等函数):

此对象的哈希码值,等于此对象int表示的原始值Integer

因此去Integer表示 24 位 RGB 值。然而事实证明它Color.hashCode()是一样快的,并且由于Colorclass 比 更具表现力和可读性Integer,所以使用Colorclass 代替。

于 2012-12-20T16:28:54.187 回答
0

Java 有一个用于存储颜色的内置类,称为Color

我会去进行优化(我猜使用整数不会快得多),除非你真的看到它的瓶颈

于 2012-12-20T16:28:49.993 回答
0

使用Integers,并使用 . 获取它们new Color(r, g, b).getRGB()

要从整数中获取颜色,只需使用new Color(hashmap.get(index)).

于 2012-12-20T16:30:27.437 回答
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 回答