制作优先级队列,遇到delMin和插入问题

时间:2014-05-31 04:03:22

标签: java arraylist priority-queue

我已经使用数组列表创建了一个Priority Queue类,但是我遇到了insert和delMin(删除最小区域)的问题。我无法创建更多功能,这是我的代码:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.NoSuchElementException;


public class MyMinPQ<E extends Comparable<E>> implements Iterable<E> {
    private ArrayList<E> pq;
    private int N;

    public MyMinPQ() {
        pq = new ArrayList<E>();
    }

    public E delMin(){
        E minVal = min();
        pq.remove(0);
        N--;
        return minVal;
    }
    public E min (){
        if (isEmpty()) 
            throw new NoSuchElementException();
        return pq.get(0);
    }
    public void insert (E item){
        for (int i = 0; i < N; i++){
            pq.add(item);
            if (pq.get(i) > pq.get(i+1)) {
                E tmp = pq.get(i);
                pq.set(i+1, tmp);
        }
        }
        N++;
    }
    public boolean isEmpty() {
        return N == 0;
    }
    public int size() {
        return N;
    }

    public Iterator<E> iterator() {
        return new Iterator<E>(){
            int current = 0;
            public boolean hasNext() {
                return current != size();
            }
            public E next() {
                if (hasNext())
                    return pq.get(current++);
                else throw new NoSuchElementException( ); 
            }
            public void remove() {
                throw new UnsupportedOperationException( );             
            }   
        };
    }
}

在代码的插入部分,我知道我必须对Arraylist的新增内容进行排序,但我遇到了解决这个问题的问题。我试图比较列表中的值,但是eclipse不允许它基于我如何格式化它。当我使用compareTo时,它不适用于我的迭代器,一切都变得混乱。

我的问题是如何修改插入功能,以便按降序对新项目进行排序?我的delMin()也必须因此而改变吗?

1 个答案:

答案 0 :(得分:0)

试试这个

public void insert(E item) {
    int i = 0;
    while (i < N && pq.get(i).compareTo(item) <= 0) {
        i++;
    }
    N++;
}