如何从具有多个参数的对象的数组列表中出队?

时间:2018-07-13 00:36:15

标签: java queue priority-queue

我试图基于优先级队列中的整数值而非名称(字符串)值出队。例如,应该在[John,1]之前拉[Sally,4]。因为4的优先级高于1。但是,按照我构造Queue的方式,它是从第一个变量(名称)按字母顺序轮询。谢谢,朝着正确方向迈出的任何一步。

package stackqueuewood;
import java.util.PriorityQueue;
import java.util.ArrayList;

public class StackQueueWood {

public static void main(String[] args) {

    ArrayList<String> people = new ArrayList<>();

        people.add(person("Tom", 3));
        people.add(person("Dick", 4));   
        people.add(person("Harry", 2));                 

    PriorityQueue<String> pQ = new PriorityQueue<>();

        pQ.addAll(people);
        System.out.println("The current queue size is: " + pQ.size());
        System.out.println("The current queue is: \n" + pQ);

        System.out.println(pQ.peek());
        pQ.poll();
        System.out.println(pQ);
}
public static String person(String name, int priority){

    return ("(" + name + ", " + priority + ")");
 }  
}

2 个答案:

答案 0 :(得分:0)

创建两个新类来代表一个人,而不是将两个值合并为一个String,并使用名称和优先级字段。然后,您可以使用PriorityQueue<Person>并指定要使用的Comparator(可能是Comparator.comparingInt(Person::getPriority))。

答案 1 :(得分:0)

您需要:

c.Add(key = "five", value = 5)

然后:

Comparator<String> orderIsdn =  new Comparator<String>() { 
    //Your sorting method
}