Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String_Comparator - Fatal编程技术网

优先级队列和比较器-Java

优先级队列和比较器-Java,java,string,comparator,Java,String,Comparator,试图用字符串长度作为排序因子创建优先级队列,但比较器似乎不起作用。如果我在SortedSet上使用相同的运算符,则效果良好 下面的代码打印: [z,CD,ZHE21,CDE2312,ABC1] 而我期待的是: [z,CD,ABC1,ZHE21,CDE2312] 我错过了什么 PriorityQueue<String> queue = new PriorityQueue<String>(100, new Comparator<String>() {

试图用字符串长度作为排序因子创建优先级队列,但比较器似乎不起作用。如果我在SortedSet上使用相同的运算符,则效果良好

下面的代码打印: [z,CD,ZHE21,CDE2312,ABC1]

而我期待的是: [z,CD,ABC1,ZHE21,CDE2312]

我错过了什么

PriorityQueue<String> queue = new PriorityQueue<String>(100, new Comparator<String>() {
        public int compare(String a, String b) {
            return Integer.compare(a.length(), b.length());
        }
    });

    queue.add("CDE2312");
    queue.add("ABC1");
    queue.add("ZHE21");
    queue.add("CD");
    queue.add("z");

    System.out.println(queue);
PriorityQueue队列=新的PriorityQueue(100,新的比较器(){
公共整数比较(字符串a、字符串b){
返回整数。比较(a.length(),b.length());
}
});
添加(“CDE2312”);
添加(“ABC1”);
添加(“ZHE21”);
添加(“CD”);
添加(“z”);
System.out.println(队列);

来自Javadoc:method Iterator()中提供的迭代器和method Spliterator()中提供的拆分器不保证以任何特定顺序遍历优先级队列的元素。如果您重复
poll()
队列,那么您将以正确的顺序获得元素。更重要的是,如果您只是搜索“Java PriorityQueue not working”,您将看到同样的问题被反复询问,并且答案几乎总是相同的。在询问之前,最好先进行此类搜索。从Javadoc中可以看出:方法迭代器()中提供的迭代器和方法拆分器()中提供的拆分器不能保证以任何特定顺序遍历优先级队列的元素。如果您反复
轮询()
队列,更重要的是,如果你只搜索“Java PriorityQueue not working”,你会看到同样的问题被反复问,答案几乎总是一样的。最好在询问之前先进行此类搜索。