我有一个名为Person
的对象,其属性为name
,并且有一个优先级为Person的队列pq
。我重写了compareTo
类的Person
函数,以按相反的字母顺序对其进行排序:
@Override
public int compareTo(Person p)
return p.getName().compareTo(this.name);
然后我添加了以下名称:
PriorityQueue<Person> pq = new PriorityQueue<>();
pq.add(new Person("Ben"));
pq.add(new Person("Ben"));
pq.add(new Person("Adam"));
pq.add(new Person("Zedd"));
System.out.println(pq);
但是从输出中您可以看到排序无法正常工作:
[Name: Zedd, Name: Ben, Name: Adam, Name: Ben]
但是,如果我在compareTo函数中交换比较器的顺序,则它看起来像这样:
return this.name.compareTo(p.getName());
然后输出对于常规字母顺序可以正常工作:
[Name: Adam, Name: Ben, Name: Ben, Name: Zedd]
为什么会这样?