Discuss / Java / 元素放完之后的队列并不是已经完全排好序的,要保证按照预期的顺序打印就必须使用poll方法每次获取队首的元素(此过程还会再次调用compare方法)

元素放完之后的队列并不是已经完全排好序的,要保证按照预期的顺序打印就必须使用poll方法每次获取队首的元素(此过程还会再次调用compare方法)

Topic source
public static void main(String[] args) {        Queue<Person> personList = new PriorityQueue<>((o1, o2) -> {            final Integer num1 = Integer.parseInt(o1.getNumber().substring(1));            final Integer num2 = Integer.parseInt(o2.getNumber().substring(1));            if (o1.getNumber().charAt(0) == o2.getNumber().charAt(0)) {                return num1.compareTo(num2);            } else if (o1.getNumber().charAt(0) == 'V' || o1.getNumber().charAt(0) == 'v') {                return -1;            } else {                return 1;            }        });        personList.offer(new Person("a", "V3"));        personList.offer(new Person("b", "V2"));        personList.offer(new Person("c", "A10"));        personList.offer(new Person("d", "V1"));        personList.offer(new Person("e", "A3"));        for (Person person : personList) {            System.out.println(person);        }    }}class Person {    private String name;    private String number;    Person(String name, String number) {        this.name = name;        this.number = number;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getNumber() {        return number;    }    public void setNumber(String number) {        this.number = number;    }    @Override    public String toString() {        return "Person{" +                "name='" + name + '\'' +                ", number='" + number + '\'' +                '}';    }

打印结果(原始队列的元素顺序-并未按照预期顺序排好):

Person{name='d', number='V1'}

Person{name='b', number='V2'}

Person{name='c', number='A10'}

Person{name='a', number='V3'}

Person{name='e', number='A3'}

通过poll方法获取则可以保证顺序:

public static void main(String[] args) {        Queue<Person> personList = new PriorityQueue<>((o1, o2) -> {            final Integer num1 = Integer.parseInt(o1.getNumber().substring(1));            final Integer num2 = Integer.parseInt(o2.getNumber().substring(1));            if (o1.getNumber().charAt(0) == o2.getNumber().charAt(0)) {                return num1.compareTo(num2);            } else if (o1.getNumber().charAt(0) == 'V' || o1.getNumber().charAt(0) == 'v') {                return -1;            } else {                return 1;            }        });        personList.offer(new Person("a", "V3"));        personList.offer(new Person("b", "V2"));        personList.offer(new Person("c", "A10"));        personList.offer(new Person("d", "V1"));        personList.offer(new Person("e", "A3"));        int size = personList.size();        for (int i = 0; i < size; i++) {            System.out.println(personList.poll());        }    }}class Person {    private String name;    private String number;    Person(String name, String number) {        this.name = name;        this.number = number;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getNumber() {        return number;    }    public void setNumber(String number) {        this.number = number;    }    @Override    public String toString() {        return "Person{" +                "name='" + name + '\'' +                ", number='" + number + '\'' +                '}';    }}

打印结果和预期一样:

<img src="data:image/png;base64,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" >


  • 1

Reply