你的expected value是什么

解决方案 »

  1.   

    这实际上是一个指定了自定义比较器的优先级队列。在提供的自定义比较器中,要求如果,同为偶数或者同为奇数,则大者在前,如果不同,则,偶数在前。
    我是查API中的java.util.PriorityQueue<E>类和java.util.Comparator<T>接口,然后分析代码中的compare()方法得出这个结论的。
      

  2.   

    还是没看懂你说的呀,我想知道 那个返回值result 用来干嘛的 ,compare方法有int型返回值,什么作用?
      

  3.   

    我明白这种比较。它的原理是这样的:构造了一个优先级队列PriorityQueue,当依次往里边压入数的时候,每入队一个数,这个数要在队列中找自己的位置,找到位置就放在相应的位置。找位置的方法是这样的:新入队的数和已经在队列中的数从后往前依次比较,比较的方法在compare函数中给出的。compare函数是这样的:
    compare<i, j>函数的返回值是小于0, 0, 和大于0。
    当返回值小于0,则认为i小于j,i应该在后,j应该在前。
    当返回值等于0,则认为i等于j,i和j应该排在同一个位置。
    当返回值大于0,则认为i大于j,i应该排在前面,j应该排在后面。compare<olddata, newdata>,
    当newdata是偶数的时候就往已经遇到的奇数之前走,直到它遇到一个偶数,那么它会和这个偶数按大小排列。当newdata是一个奇数的时候,它会统一排所有偶数的后边,所有的奇数又是按照大小排列的。
      

  4.   

    因为这里result的返回值是这样确定的: