我已经使用数组列表创建了一个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()
也必须因此而改变吗?
答案 0 :(得分:0)
试试这个
public void insert(E item) {
int i = 0;
while (i < N && pq.get(i).compareTo(item) <= 0) {
i++;
}
N++;
}