Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 爪哇:这里的回报是什么?_Java_Sorting_Queue_Comparator - Fatal编程技术网

Java 爪哇:这里的回报是什么?

Java 爪哇:这里的回报是什么?,java,sorting,queue,comparator,Java,Sorting,Queue,Comparator,我是在计算机上建立这个代码的。如果有人问我,请原谅,但我不明白一件事。确切地说,返回population2-population1的是什么? 它通过每次相互比较(o1和o2)对项目进行排序,将冒号后面的部分进行排序,不带任何最终空格(前导和尾声),因此编号,并按 import java.util.Comparator; import java.util.PriorityQueue; public class Main { public static void main(String[] arg

我是在计算机上建立这个代码的。如果有人问我,请原谅,但我不明白一件事。确切地说,返回population2-population1的是什么? 它通过每次相互比较(o1o2)对项目进行排序,将冒号后面的部分进行排序,不带任何最终空格(前导和尾声),因此编号,并按

import java.util.Comparator;
import java.util.PriorityQueue;
public class Main {
 public static void main(String[] args) {
  PriorityQueue<String> queue = new PriorityQueue<String>(11,
  new Comparator<String>() {
   public int compare(String o1, String o2) {
   int population1 = Integer.parseInt(o1.split(":")[1].trim());
   int population2 = Integer.parseInt(o2.split(":")[1].trim());
   return population2 - population1;
   }
  });
queue.add("United States: 307006550");
queue.add("Brazil: 193733800");
queue.offer("Russia: 141850000");
queue.offer("India: 1155347700");
queue.offer("China: 1331460000");
System.out.println("Countries in database: " + queue.size());
while (!queue.isEmpty()) {
  System.out.println(queue.poll());
}
System.out.println("Countries in database: " + queue.size());
 }
}
其编号如下:

United States: 307006550
Russia: 141850000
Brazil: 193733800
India: 1155347700
China: 1331460000

为什么?

Comparator.compare的文档说明
比较了它的两个参数的顺序。返回一个负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数。

因此,他们使用减法来确定第一个数字是大于、等于还是小于第二个数字,并且该值符合比较契约。i、 如果第一个是5,第二个是10,那么10-5=-5。负返回值表示第一个参数小于第二个参数


请注意,当您反转它时(我假设您的意思是更改为
返回填充1-填充2;
,而不是您编写的,与代码示例相同),您的填充排序也会反转。

Comparator.compare的文档说明
会比较它的两个参数的顺序。返回一个负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数。

因此,他们使用减法来确定第一个数字是大于、等于还是小于第二个数字,并且该值符合比较契约。i、 如果第一个是5,第二个是10,那么10-5=-5。负返回值表示第一个参数小于第二个参数

请注意,当您将其反转时(我假设您的意思是更改为
返回填充1-填充2;
而不是您编写的,这与代码示例相同),您的填充排序也会反转。

查看
比较器

简而言之,当第一个对象大于第二个对象时,Comparator方法应返回负值,如果它们相等,则返回零;如果第二个对象大于第一个对象,则返回正值

所以
返回population2-population1仅指示哪个对象更大。

查看
比较器的

简而言之,当第一个对象大于第二个对象时,Comparator方法应返回负值,如果它们相等,则返回零;如果第二个对象大于第一个对象,则返回正值


所以
返回population2-population1仅指示哪个对象更大。

我建议您在PriorityQueue类上查找文档。第二个参数是接收一个带有方法比较的“Comparator”类,如果o1==02,该方法将返回0;如果o1<02,则返回<0;如果o1<02,则返回>0(非常常见的习惯用法)。然后,该方法在PriorityQueue中被称为表单,作为排序算法的一部分。

我建议您查找PriorityQueue类的文档。第二个参数是接收一个带有方法比较的“Comparator”类,如果o1==02,该方法将返回0;如果o1<02,则返回<0;如果o1<02,则返回>0(非常常见的习惯用法)。然后,该方法在PriorityQueue中被称为表单,作为排序算法的一部分。

完成比较的方法是将一个值与另一个值进行比较。但是,由于比较会得到三个可能的答案,而不是两个,因此我们需要一种方便的方式让分拣员知道第一个元素是否小于、等于或大于第二个元素。最简单的方法是,如果元素1小于元素2,则返回一个负数,如果它们相等,则返回一个0,如果第一个元素较大,则返回一个正数

我们可以用如下代码手动编写

if(population1 < population2)
    return -1;
else if(population1 > population2)
    return 1;
return 0;
if(填充1<填充2)
返回-1;
否则如果(填充1>填充2)
返回1;
返回0;
但是,分拣机只检查负值和正值,因此结果的大小无关紧要,只要负数表示小于,正数表示大于。现在,因为我们比较的两个值是数字,我们想按降序对它们进行排序,所以我们只需执行
population1-population2
。如果population1小于population2,则返回负值;如果两者相同,则返回0;如果population1大于population2,则返回正值。这只是一种方便。如果您想要相反的效果(按升序排序),只需反转语句(如您已经显示的)


对于sleax的最新评论,Java使用了一个modified,它使用了
compareTo(..)
函数返回的信息。您可以阅读有关合并排序的工作原理。

进行比较的方法是将一个值与另一个值进行比较。但是,由于比较会得到三个可能的答案,而不是两个,因此我们需要一种方便的方式让分拣员知道第一个元素是否小于、等于或大于第二个元素。最简单的方法是,如果元素1小于元素2,则返回一个负数,如果它们相等,则返回一个0,如果第一个元素较大,则返回一个正数

我们可以用如下代码手动编写

if(population1 < population2)
    return -1;
else if(population1 > population2)
    return 1;
return 0;
if(填充1<填充2)
返回-1;
否则如果(填充1>填充2)
返回1;
返回0;
但是,分拣机只检查负值和正值,因此结果的大小无关紧要,只要负数表示小于,正数表示大于。现在,因为我们比较的两个值是数字,我们想按降序对它们进行排序,所以我们只需执行
population1-population2