有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何正确迭代优先级队列?

我有一个java任务,涉及迭代优先级队列。队列由包含字符串和int的对象组成,我需要有一种方法来对照队列中的所有对象检查单独对象的字符串

最好的方法是使用迭代器对象吗?那看起来太乱了。我可以排队,也可以排队,但这似乎效率低下。也许是foreach循环


共 (3) 个答案

  1. # 1 楼答案

    是的,如果需要检查集合中的每个元素,最好使用iteratorfor each

    Iterator<E> iter = myPriorityQueue.iterator();
    while (iter.hasNext()) {
        current = iter.next();
        // do something with current
    }
    

    或者

    for (Element e : myQueue) {
            // do something with e
    }
    
  2. # 2 楼答案

    一个小细节:如果在循环过程中您的队列可能会被修改,那么iteratorfor each都会导致ConcurrentModificationException;如果在处理过程中队列可能会被修改,您可以使用^{

        Resource resource;
        while ((resource = resourceQueue.poll()) != null) {
            this.processIncludes(resourceQueue, resource);
        }
    
  3. # 3 楼答案

    如果你不在乎订购(在这种情况下,你为什么要处理PriorityQueue?),使用迭代器。如果要按优先级进行迭代,请参阅Javadoc的建议:

    If you need ordered traversal, consider using Arrays.sort(pq.toArray()).