【问题标题】:How do i dequeue from an array list of objects that have multiple parameters?如何从具有多个参数的对象数组列表中出列?
【发布时间】:2018-07-13 00:36:15
【问题描述】:

我正在尝试根据优先级队列中的整数值而不是名称(字符串)值进行出列。例如,[Sally, 4] 应该放在 [John, 1] 之前。因为 4 的优先级高于 1。但是我构建队列的方式是从第一个变量(名称)按字母轮询。非常感谢您朝着正确方向迈出的任何一步,谢谢。

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 + ")");
 }  
}

【问题讨论】:

  • 那么它在哪里解释了我的要求,因为我很难找到它。那些显示单个参数对象。
  • 您必须实际创建一个类来模拟person。那么方法应该大致相同
  • 所以方法人应该被删除,并创建一个单独的类来做同样的事情正确吗?这样类就可以作为可以操作的构造函数工作吗?我的方法在哪里不能被操纵?

标签: java queue priority-queue


【解决方案1】:

与其将两个值连接在一起形成String,不如创建一个新类来表示一个人,其中包含名称和优先级字段。然后您可以使用PriorityQueue&lt;Person&gt; 并指定要使用的Comparator(可能是Comparator.comparingInt(Person::getPriority))。

【讨论】:

  • 啊,好吧。我明白你在说什么,我试试看。
【解决方案2】:

你需要:

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

然后:

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

【讨论】:

  • 使用格式化工具使您的帖子更具可读性。使用code blocking 表示代码、日志和错误文本,使用bolditalics 突出显示内容。还要详细说明你的答案。
猜你喜欢
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多