package cf1;

import java.util.ArrayList;
import java.util.List;

// Le ? super E n'est pas demandé pour le contrôle (la notion n'a pas été vue)
// Cette déclaration signifie que E étend Comparable
// Ensuite, le ? est un type F qui n'est pas explicitement donné à l'utilisation
// tel que F soit un parent de E (super à le sens inverse de extends)
// Dans notre cas, E est un Node et F est Weight puisque E étend Weight
public class PriorityQueue<E extends Comparable<? super E> > {
	List<E> list; 
	
	PriorityQueue() {
		list = new ArrayList<>();
	}
	
	public void add(E e) {
		list.add(e);		
	}
	
	public int size() {
		return list.size();
	}
	
	public E poll() {
		if(list.size() == 0)
			return null;
		
		int min = 0;
		
		for(int i=1; i<list.size(); i++) {
			if(list.get(i).compareTo(list.get(min)) < 0)
				min = i;
		}

		int last = list.size() - 1;
		E res = list.get(min);
		list.set(min, list.get(last));
		list.remove(last);
		
		return res;
	}
}
