gpt4 book ai didi

java - PriorityQueue 检索已排序的元素

转载 作者:行者123 更新时间:2023-11-30 04:22:23 26 4
gpt4 key购买 nike

我想在java中有一个排序的集合,我可以对其进行迭代。从我读到的内容来看, PriorityQueue 是我需要的东西,但是当我无法弄清楚如何以排序的方式检索元素时......

我做了这个测试示例:

Main.java

import java.util.PriorityQueue;
public class Main {

public static void main(String[] args) {
PriorityQueue<Object> queue=new PriorityQueue<Object>();
Object o1=new Class1("o1");
Object o2=new Class2("o2");
Object o3=new Class1("o3");
Object o4=new Class1("o4");
Object o5=new Class2("o5");
Object o6=new Class2("o6");
Object o7=new Class1("o7");
Object o8=new Class2("o8");
Object o9=new Class1("o9");
Object o0=new Class1("o0");
queue.add(o7);
queue.add(o4);
queue.add(o3);
queue.add(o8);
queue.add(o5);
queue.add(o1);
queue.add(o2);
queue.add(o9);
queue.add(o0);
queue.add(o6);

for (Object object : queue) {
System.out.println(object);
}
}
}

Class1.java:

public class Class1 implements Comparable<Object>{
String name;

public Class1(String name) {
super();
this.name = name;
}

@Override
public String toString() {
return "Class1 [name=" + name + "]";
}

@Override
public int compareTo(Object o) {
return (o instanceof Class1)?compareTo((Class1)o):compareTo((Class2)o);
}

public int compareTo(Class1 o){
return name.compareTo(o.name);
}

public int compareTo(Class2 o){
return name.compareTo(o.name2);
}

}

Class2.java:

public class Class2 implements Comparable<Object>{
String name2;

public Class2(String name) {
super();
this.name2 = name;
}

@Override
public String toString() {
return "Class2 [name=" + name2 + "]";
}

@Override
public int compareTo(Object o) {
return (o instanceof Class1)?compareTo((Class1)o):compareTo((Class2)o);
}

public int compareTo(Class1 o){
return name2.compareTo(o.name);
}

public int compareTo(Class2 o){
return name2.compareTo(o.name2);
}

}

这将返回:

Class1 [name=o0]
Class1 [name=o1]
Class2 [name=o2]
Class2 [name=o5]
Class2 [name=o6]
Class1 [name=o4]
Class1 [name=o3]
Class1 [name=o9]
Class2 [name=o8]
Class1 [name=o7]

我需要做什么才能以排序的方式迭代这个集合?

最佳答案

只有在将元素出列时,元素才会按排序顺序返回给您。当您迭代队列而不出列时,顺序是优先级队列实现的内部顺序。

用下面的代码替换循环将为您提供正确顺序的数据:

Object last;
while ((last = queue.poll()) != null) {
System.out.println(last);
}

由于出队保证以正确的顺序发生,因此会产生以下输出:

Class1 [name=o0]
Class1 [name=o1]
Class2 [name=o2]
Class1 [name=o3]
Class1 [name=o4]
Class2 [name=o5]
Class2 [name=o6]
Class1 [name=o7]
Class2 [name=o8]
Class1 [name=o9]

Here is a demo on ideone.

关于java - PriorityQueue 检索已排序的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16732665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com