我想创建一个以 RGB 颜色为键的 HashMap。我应该如何存储它们以获得最佳性能?我的意思是,哈希图的“速度”如何指代键的对象类型?
我应该使用Integer (018052175)
每个三元组是 RGB 中的一个,String (1234AF)
作为 HEX,还是使用自己的 Color 类int r, g, b
?最快的实现可能是什么?
hashCode
哈希映射的速度受和equals
函数的几个基本属性限制:
hashCode
将值分配到存储桶中的能力如何,以及a的hashCode
功能String
非常好,并String
缓存其结果以提高性能。但是,相等性检查可能比 with 更长Integer
。
该类在速度方面Integer
具有非常难以击败的实现hashCode
,但是由于相似颜色的哈希码会彼此接近,因此您可能会与Integer
s 发生更多冲突。
Color
与 一样快Integer
,但也是最具描述性的。我严重怀疑选择这三种表示中的一种会严重影响性能以产生明显的差异,因此我建议选择最具描述性的选择,然后在必要时进行配置。
唯一的区别是 hashcode/equals 函数的速度,Integer 应该是最快的,尽管它在任何情况下都不太可能成为瓶颈。您可能应该在代码的其他地方使用最方便的任何内容。
HashMap
基于hashCode()
并且Integer.hashCode()
尽可能快地获得(它是一个恒等函数):
此对象的哈希码值,等于此对象
int
表示的原始值Integer
。
因此去然而事实证明它Integer
表示 24 位 RGB 值。Color.hashCode()
是一样快的,并且由于Color
class 比 更具表现力和可读性Integer
,所以使用Color
class 代替。
Java 有一个用于存储颜色的内置类,称为Color。
我会去进行优化(我猜使用整数不会快得多),除非你真的看到它的瓶颈
使用Integer
s,并使用 . 获取它们new Color(r, g, b).getRGB()
。
要从整数中获取颜色,只需使用new Color(hashmap.get(index))
.
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
它,因为它可以更好地传达语义。