相关疑难解决方法(0)

将priorityQueue更改为max priorityqueue

我在整数Java中有优先级队列:

 PriorityQueue<Integer> pq= new PriorityQueue<Integer>();
Run Code Online (Sandbox Code Playgroud)

当我打电话时,pq.poll()我得到最小元素.

问题:如何更改代码以获取最大元素?

java collections priority-queue

97
推荐指数
9
解决办法
15万
查看次数

是否有具有固定容量和自定义比较器的PriorityQueue实现?

相关问题:

我有一个非常大的数据集(超过500万件),我需要从中获得N个最大的项目.最自然的方法是使用堆/优先级队列,只存储前N个项目.JVM(Scala/Java)的优先级队列有几个很好的实现,即:

前2个很好,但它们存储了所有项目,在我的情况下会产生关键的内存开销.第三个(Lucene实现)没有这样的缺点,但正如我从文档中看到的那样,它也不支持自定义比较器,这对我来说没用.

所以,我的问题是:是否有PriorityQueue实现固定容量自定义比较

UPD.最后,根据Peter的回答,我创建了自己的实现:

public class FixedSizePriorityQueue<E> extends TreeSet<E> {

    private int elementsLeft;

    public FixedSizePriorityQueue(int maxSize) {
        super(new NaturalComparator());
        this.elementsLeft = maxSize;
    }

    public FixedSizePriorityQueue(int maxSize, Comparator<E> comparator) {
        super(comparator);
        this.elementsLeft = maxSize;
    }


    /**
     * @return true if element was added, false otherwise
     * */
    @Override
    public boolean add(E e) {
        if (elementsLeft == 0 && …
Run Code Online (Sandbox Code Playgroud)

java heap scala priority-queue

43
推荐指数
3
解决办法
2万
查看次数

PriorityQueue没有在添加上排序

我有一个优先级队列,我在其中添加一个Node对象,其中节点应按其包含的值排序.由于某种原因,优先级队列不会对添加的节点进行排序.如果有人可以看到这个问题或有任何指导,我很感激.这是一个简短的例子:

PriorityQueue<Node> PQ = new PriorityQueue<Node>();
        //for each entry create a node and add it to the PriorityQueue
        for(Entry<Character,Integer> entry : entries){
            PQ.add(new Node(entry.getKey(),entry.getValue(), true));
        }
Run Code Online (Sandbox Code Playgroud)

这是节点的compareTo方法:

@Override
public int compareTo(Node n) {
  if(n.frequency.intValue() > this.frequency.intValue()) return  -1;
  else if(n.frequency.intValue() == this.frequency.intValue()) return 0;
  else return 1;
}
Run Code Online (Sandbox Code Playgroud)

java sorting priority-queue

25
推荐指数
2
解决办法
1万
查看次数

编辑元素时重新排序Java优先级队列

我正在尝试使用优先级队列来实现Dijkstra的算法来寻找最短路径.在算法的每个步骤中,我删除距离优先级队列最短距离的顶点,然后更新优先级队列中每个邻居的距离.现在我读到Java中的优先级队列在编辑其中的元素(确定排序的元素)时不会重新排序,所以我试图通过插入和删除虚拟顶点来强制它重新排序.但这似乎并没有起作用,而且我一直试图解决这个问题.

这是顶点对象和比较器的代码

class vertex {
    int v, d;
    public vertex(int num, int dis) {
        v=num;
        d=dis;
    }
}

class VertexComparator implements Comparator {
    public int compare (Object a, Object b) {
        vertex v1 = (vertex)a;
        vertex v2 = (vertex)b;
        return v1.d-v2.d;
    }
 }
Run Code Online (Sandbox Code Playgroud)

这是我运行算法的地方:

    int[] distances=new int[p];
    Comparator<vertex> comparator = new VertexComparator();
    PriorityQueue<vertex> queue = new PriorityQueue<vertex>(p, comparator);
    for(int i=0; i<p; i++) {
        if(i!=v) {
            distances[i]=MAX;
        }
        else {
            distances[i]=0;
        }
        queue.add(new vertex(i, distances[i]));
    }
    // run dijkstra
    for(int i=0; …
Run Code Online (Sandbox Code Playgroud)

java priority-queue

24
推荐指数
3
解决办法
2万
查看次数

将键和值添加到优先级队列中并按Java键中的键排序

我试图接受一个字符串列表,并将它们添加到具有键和值的优先级队列中.Key是单词,值是单词的字符串值.然后我需要先用最高的字符串值对队列进行排序.优先级队列不允许我添加2个值.

public static List<String> pQSortStrings(List<String> strings) {
    PriorityQueue<String, Integer> q = new PriorityQueue<>();

    for (int x = 0; x < strings.size(); x++) {
        q.add(strings.get(x),calculateStringValue(strings.get(x)));
    }
    return strings;
}
Run Code Online (Sandbox Code Playgroud)

java priority-queue

7
推荐指数
2
解决办法
2万
查看次数

表示对象中优先级/首选项的最佳方法是什么?

在域中建模优先级/首选项的最佳方法是什么?
例如,假设我有一个Person代表一个人的课程并且有一些偏好,例如PersonX喜欢披萨,spaggetti和omelete,实际上他更喜欢spagetti比披萨.
这些最好的模型如何?
第一个想法只是将它们放入List(作为成员变量Person)根据插入顺序保持首选项,例如列表中的第一个是最喜欢的,然后列表中的第二个是最喜欢的等等但是这似乎是我最终太乏味了.例如,当我想对偏好等进行搜索或关联时,
或许对这样的问题有一个标准的方法吗?

java oop design-patterns domain-driven-design

6
推荐指数
1
解决办法
331
查看次数

PriorityQueue,优先插入

我想知道如何为具有特定值的PriorityQueue添加值.

我有一个Map<Integer, Integer> // element -> value ,我想elements优先插入PriorityQueue value.

例如:

Map{1=0, 3=5265, 5=22375, 7=4202, 9=233, 11=351, 13=119}
Run Code Online (Sandbox Code Playgroud)

应该在队列中有这个顺序:

{1, 13, 9, 11, 7, 3, 5}
Run Code Online (Sandbox Code Playgroud)

java priority-queue

3
推荐指数
1
解决办法
4999
查看次数

按指定值对对象的优先级队列进行排序

我想通过使用这样的指定值将对象添加到优先级队列

PriorityQueue<Edge> queue=new PriorityQueue<Edge>();
Run Code Online (Sandbox Code Playgroud)

这是 Edge 类,我想按其权重在优先级队列中排序

public class Edge {
private int start,end;
private double weight;

public Edge(int s, int e,Double w){
    start=s;
    end=e;
    weight=w;
}

public int getStart(){
    return start;
}

public int getEnd(){
    return end;
}

public double getWeight(){
    return weight;
}
Run Code Online (Sandbox Code Playgroud)

java priority-queue

3
推荐指数
1
解决办法
1万
查看次数

Java中对象的优先级队列

你好我有点失去了优先级队列和比较器.我真的没有看到如何在java中制作比较器所以我所拥有的是给我一个错误,而我所读到的内容对我没有帮助 http://www.tutorialspoint.com/java/java_using_comparator.htm 这个帖子游戏我一些想法,但我仍然坚持如何做它 如何使用PriorityQueue?

我所拥有的是一个创建具有优先级,到达时间和完成时间的对象的类.我还有一些优先级队列来放置它们.当我开始时,我将它们放入到达队列中以对它们进行排序,然后查看哪一个进入并将其放入队列中.但是当我尝试将第二个添加到到达队列时,它会失败并抛出异常.我首先要做的是将所有进程添加到到达队列,然后对它们进行排序,使得到达时间最短的进程将是到达队列中的第一个并进入队列一.感谢您的帮助

    //the comparator
    Comparator<Integer> comparator = new Comparator();
    //priority queues
    //only needs 10 elements to  hold
    PriorityQueue one = new PriorityQueue(10, comparator);
    PriorityQueue two = new PriorityQueue(10, comparator);
    PriorityQueue three = new PriorityQueue(10, comparator);
    PriorityQueue four = new PriorityQueue(10, comparator);
    PriorityQueue arrival = new PriorityQueue(10, comparator);

    //put all processes in arrival queue
    arrival.add(p1);
    arrival.add(p2);
    arrival.add(p3);
    arrival.add(p4);
    arrival.add(p5);
    arrival.add(p6);
    arrival.add(p7);
    arrival.add(p8);
    arrival.add(p9);
    arrival.add(p10);
Run Code Online (Sandbox Code Playgroud)

java priority-queue comparator

2
推荐指数
1
解决办法
2万
查看次数

如何在java中的Queue前面添加一个元素?

我正在使用Queue<T> q1并且我知道将q1.offer();在队列末尾添加一个元素。但是现在,我想要做的是在队列前面添加一个元素,这是队列无法实现的。我能想到的可能方法是

  • 使用双端队列,我可以在前面和最后添加元素。
  • 反转 q1,在队列末尾添加元素并再次反转。

现在,作为一个非程序员的人,我不确定如何编写这些方法;哪个更经济,更容易做。

我在 1) 中遇到的问题是将现有 Queue 转换为 Deque,反之亦然;并在 2) 如何使用Collections.reverseOrder();来反转现有的队列。

java queue reverse deque

2
推荐指数
1
解决办法
2万
查看次数

如何实现java.util.priorityqueue?

有谁知道标准java优先级队列的实现细节?堆?skiplist?

java queue performance priority-queue data-structures

0
推荐指数
1
解决办法
2991
查看次数

获取数组中n个最小元素的索引

我有一个int数组,int[] myArray = new int[100];并希望获得最小10(任意n)元素的索引.我怎样才能做到这一点?

java

-3
推荐指数
1
解决办法
7081
查看次数