java - 根据给定的数字或字符串生成范围内的唯一数字

标签 java algorithm random sampling

我想要实现的是这样的事情,假设我们有一个包含 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/

相关文章:

c# - 这是找到最短路径的最佳算法(时间复杂度)

javascript - jQuery Math.random : avoid repeating same item

javascript - 页面刷新上的随机标题图像,CSS jquery javascript?

java - 随机生成器 - 继承变量

算法:确定由任意路径描绘的两个扇形的形状,然后填充其中一个

java - 如何从数组/ArrayList中获取特定元素?

java - Hadoop名称节点secondarynode突然停止

java - JUnit 4 中人类可读的测试名称

java - Uber API - 在沙盒中请求乘车 - 接收错误 : Invalid request - validation_failed

algorithm - 在排序数组中查找绑定(bind)给定值的两个连续值的优雅方法?