Java中颜色的哈希函数

Java中颜色的哈希函数,java,colors,hash-function,Java,Colors,Hash Function,我需要通过时间来表示一系列元素。出于设计目的,每一个都应该有一种颜色,以便更简单地一目了然地识别每一个。关键是,如果人类无法感知到每个元素之间的颜色差异,那么它们之间的颜色就毫无意义 元素的唯一固定属性是它们的ID。支持此ID在不同元素之间有所不同,但这是不确定的 我要寻找的是一个基于数字ID的哈希函数,它返回一个十六进制颜色(web格式,例如#f62035),该颜色与前一个ID和下一个ID有很大不同。此外,十六进制颜色不能太暗,因为元素显示的背景是黑色的 例如: Element ID: 12

我需要通过时间来表示一系列元素。出于设计目的,每一个都应该有一种颜色,以便更简单地一目了然地识别每一个。关键是,如果人类无法感知到每个元素之间的颜色差异,那么它们之间的颜色就毫无意义

元素的唯一固定属性是它们的ID。支持此ID在不同元素之间有所不同,但这是不确定的

我要寻找的是一个基于数字ID的哈希函数,它返回一个十六进制颜色(web格式,例如#f62035),该颜色与前一个ID和下一个ID有很大不同。此外,十六进制颜色不能太暗,因为元素显示的背景是黑色的


例如:

Element ID: 12  
Element ID: 13

hash(12) = #f46600  
hash(13) = #5aa9aa

依你需要多少不同的颜色而定,我认为你最好的解决办法是建立一个使用颜色的列表,比如说100种不同的颜色,然后按照你想使用的顺序对它们进行排序,然后你可以按顺序从这个列表中分配它们作为你的颜色,当您到达列表的末尾时,可以重新开始

此解决方案不具有可扩展性,但您必须记住,只有极少数颜色是人类可以识别的,它们是不同的,适合您的设计


要创建此列表,也许您可以编写一个不同的java应用程序来显示颜色选择器,这样您可以选择颜色,代码会为您创建列表

您可以调整此解决方案:@JonLin这是我的最后一个选项,因为颜色不能保存到DB,在不同的执行中应该是相同的颜色,但是谢谢;)@无论怎样,当你构造随机数时,你都可以通过使用一个已知的种子(比如12345L)来避免类似的问题。然后,如果您以相同的顺序执行(完全)相同的操作,您将得到相同的结果。
hashCode()
实现的一个常见问题是多样性太少,
HashMap
实现会格外小心地破坏结果,从而使哈希代码差异很大。您可以查看
HashMap#hash(int)
的源代码,并将此思想用于您的目的。您可以将其转化为精确的解决方案。建立一个颜色列表(手动一次,或如上所述的伪随机),并使用(传统哈希代码)mod(列表长度)从列表中选择颜色。