基于人类论点的优先级排队

时间:2019-02-02 15:44:05

标签: java class priority-queue

嘿,我已经叫类人,看起来像下面

PersonClass[] person= {
            new PersonClass(90234234434L, "Name", "Surname", Age, "Street", Priority),
            ...
            ...
    };

然后,我创建阵列

 ArrayDeque<String> arrayDeque = new ArrayDeque<>();

编辑:我的错误,我已经在使用

PriorityQueue<String> priorityQueue = new PriorityQueue<>

我尝试了许多方法,但无法解决,如何按优先级值对此人员数组进行排序。如果不清楚,请询问。谢谢您的帮助。

3 个答案:

答案 0 :(得分:1)

如果要创建优先级队列,请使用PriorityQueue。假设在PersonClass上获得优先级值的方法是getPriority,则可以执行以下操作:

PriorityQueue<PersonClass> priorityQ = new PriorityQueue<>(Comparator.comparing(PersonClass::getPriority)); 

答案 1 :(得分:1)

您可以使用PersonClassComparable对象进行排序。

首先,您必须在implementsComparable PersonClass并覆盖如下所示的compareTo方法,

@Override
public int compareTo(PersonClass person) {
    return this.Priority - person.Priority;
}

然后,您可以使用sort中的Arrays方法对方法中的人员数组进行排序

Arrays.sort(array)

答案 2 :(得分:0)

您可以使用Java提供的PriorityQueue:https://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html

如果对象不是原始类型,则需要提供一个比较器。

然后使用add()方法来填充它。然后使用poll()获取第一个元素并将其从队列中删除:

PriorityQueue pq = new PriorityQueue(new PersonComparator());
for (PersonClass person : persons) {
    pq.add(person);
}

// later
PersonClass firstInQueue = pq.poll();