我想要实现的是这样的事情,假设我们有一个包含 1000 个盒子的列表和一个包含 25 种颜色的列表,现在我们想要为盒子分配颜色,这样颜色来自给定列表,并且每个当我向盒子询问颜色时,系统会选择相同的颜色。多个框可以使用相同的颜色,但无论我执行多少次算法,同一个框的颜色将始终相同。
我想我可以有一个包含 25 种颜色的列表和一个算法来根据盒子的名称或 ID 创建一个唯一的数字(在 25 范围内)。
任何人都可以帮助我什么算法应该适合我?
更新 要求略有变化,现在我需要该范围内的五种独特颜色,并且颜色必须始终相同。假设我们将盒子分成五个一组,每个盒子应该在 25 种颜色范围内获得唯一的颜色。并且算法应该始终为同一组提供相同的颜色。
最佳答案
box.getId().hashCode() % 25
将为您提供 0 到 24(含)之间的数字。
请注意,由于您没有为框之间的颜色分布指定任何规则,因此以下算法也可以满足您的要求:
return 0;
如果你想要一个好的分布,然后遍历你的盒子,并填写一个 Map<String, Integer>
其中键是框 ID,值是颜色:
Map<String, Integer> colorsByBoxId = new HashMap<String, Integer>();
int i = 0;
for (Box box : boxes) {
int colorIndex = i % 25;
i++;
colorsByBoxId.put(box.getId(), colorIndex);
}
然后每次要获取框的颜色时都使用此映射。
或者简单地做同样的事情,并添加一个 color
字段到 Box 类。
关于java - 根据给定的数字或字符串生成范围内的唯一数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13874576/