PHP中的Java Priorotyqueue表示

时间:2016-11-16 10:46:40

标签: java php collections priority-queue

我需要将Java PriorityQueue的某些功能移植到PHP,但我缺乏Java经验。对于我的第一次尝试,我只是根据优先级对列表进行排序,它在某种程度上起作用。插入具有相同优先级的项目时会出现问题。我总是将它们放在所有相同的优先级元素之后,但是它并没有给出与java相同的结果。

然后我试着用字符串来做,用长度来比较,包括Java和PHP替代品。 10个字符串按顺序排列:

"eeny","meeny","miny","moe","catch","the","tiger","by","his","toe"

我的PHP类按长度排序,并在之后放置相同长度的字符串by,moe,the,his,toe,eeny,miny,meeny,catch,tiger

然而,Java给了一些"忙碌的"订购: by,moe,the,his,toe,miny,tiger,meeny,eeny,catch

所以在 5个char字符串之后放置了的4个字符长度字符串。

在我分析了这个之后,我想我发现它是如何工作的,但我不确定。我认为当新项目具有将其放置在队列中某处的优先级时,它将替换已存在的项目,并且该项目将进入队列的末尾,无论其优先级如何。我对吗?如果是的话,那对我来说听起来不合逻辑......

这是我的Java测试代码:

PriorityQueue<String> queue = new PriorityQueue<String>(1,new Comparator<String>(){
        public int compare(String s1, String s2) {
            return s1.length() - s2.length();
        }
});        

    queue.offer("eeny");
    queue.offer("meeny");
    queue.offer("miny");
    queue.offer("moe");
    queue.offer("Catch");
    queue.offer("the");
    queue.offer("tiger");
    queue.offer("By");
    queue.offer("his");
    queue.offer("toe");

    for(int i=1;i<=10;i++) {
       System.out.println(queue.remove());
    }

由于有4个字符长度的字符串,它们在一起,但按照&#34; moe&#34;,&#34;他的&#34;,&#34; toe&#34; ,&#34;&#34; 既不是FIFO顺序也不是字母顺序。那是为什么?

1 个答案:

答案 0 :(得分:0)

好的,我明白了。我只是回答我自己的问题,以供其他人参考。 Java文档说

  

如果多个元素被绑定为最小值,则头部是其中一个元素 - 关系被任意破坏。

这意味着如果有多个元素具有相同的优先级,那么Java只需将它们按任何顺序放入它们。不是FIFO,不是字母,不是任何东西。这对我来说不太实际或合乎逻辑。无论如何,这意味着在PHP中准确表示这种行为是不可能的,所以我坚持只按优先级排序元素,然后是FIFO。