Java对映射或列表进行排序

Java对映射或列表进行排序,java,list,sorting,map,hashmap,Java,List,Sorting,Map,Hashmap,如果你有一个地图或列表,上面有一堆介于-1和1之间的双精度数字,你可以将它们从-1到1排序。 它是多么完美,例如(0.4在0.3之后但在0.5之前) 是否可以模拟将数字大致放在正确的位置,但并不完美? 很难解释我的意思,但我画了一张图表来帮助你 x是数字线上的点 我不希望它被完美地排序,既不是随机排序,而是介于两者之间;大致分类。 如果是这样的话,这是可能的吗?您可以先对它们进行排序,然后运行一组直接邻居的随机交换。例如,当列表大小为n时,您可以在随机位置交换n次。您可以使用TreeMap(带

如果你有一个地图或列表,上面有一堆介于-1和1之间的双精度数字,你可以将它们从-1到1排序。 它是多么完美,例如(0.4在0.3之后但在0.5之前)

是否可以模拟将数字大致放在正确的位置,但并不完美? 很难解释我的意思,但我画了一张图表来帮助你

x是数字线上的点

我不希望它被完美地排序,既不是随机排序,而是介于两者之间;大致分类。
如果是这样的话,这是可能的吗?

您可以先对它们进行排序,然后运行一组直接邻居的随机交换。例如,当列表大小为n时,您可以在随机位置交换n次。

您可以使用
TreeMap
(带比较器arg的构造函数)或
集合。基于
双精度,使用
比较器对(列表,比较器)
进行排序。比较(双精度,双精度)


这对于完美的排序是正确的。关于“粗略排序”,您必须编写自己的比较器逻辑。请定义您真正想要排序的术语。

您没有定义“粗略排序”,但有一个选项是“装箱”。将间隔拆分为n个宽度为intervalize/n的箱子。将存储箱存储在数组或列表中,每个存储箱都是一个值列表。在输入集上迭代一次,并将值分配到相应的容器,即O(n)。您可以通过增加存储箱的数量来改进排序。

直到您能够准确地定义大致排序的
的含义为止
我认为这是不可能的。您想保留输入的顺序吗?听起来您想对其进行排序,但之后会将其稍微弄乱,可以将其视为两个步骤。对它们进行排序,然后取随机数的相邻值并交换它们。@Keppil这就是问题所在,粗略排序没有定义。想象一下5/12是什么?你知道5/10等于5,所以它小于5,你可以近似为0.4。这就是我所说的大致意思。我来解释一下它的用途,也许这会有所帮助:该程序会给出一个随机单词列表,并给出最适合哪个单词的肯定/否定评级。然后对它进行排序并选择最上面的pos/neg单词,但是我不希望它每次都返回完美单词,也不希望它是随机返回的,而是一个比平均值更好的单词。在@assylais-give链接中,它有一个选项,我可以使用它,并在X个周期后停止它,使用您提供的来完成它。这是一个理论上的想法,我只是想看看这一部分是否可行,以及如何实现。@user2871826也许你可以对真实评级应用某种随机乘法,然后对这些模糊评级进行排序。例如:
Math.max(0.0,Math.min(1.0,x+Math.random()*0.1-0.05))
Fuzzy logic!为什么我以前没有想到这一点:\n我只是想玩一玩,看看什么效果更好。