package hjelpeklasser;
import java.util.*;
public class UsortertTabellPrioritetsKø<T> implements PrioritetsKø<T>
{
private T[] a;
private int antall;
private Comparator<? super T> c;
public UsortertTabellPrioritetsKø(int størrelse, Comparator<? super T> c)
{
a = (T[])new Object[størrelse];
antall = 0;
this.c = c;
}
public UsortertTabellPrioritetsKø(Comparator<? super T> c)
{
this(8,c);
}
public static <T extends Comparable<? super T>> PrioritetsKø<T> naturligOrdenKø()
{
return new UsortertTabellPrioritetsKø<>(Comparator.naturalOrder());
}
@Override
public void leggInn(T verdi)
{
if (verdi == null) throw new IllegalArgumentException("Nullverdi!");
if (antall == a.length) a = Arrays.copyOf(a,2*antall+1);
a[antall++] = verdi;
}
@Override
public int antall()
{
return antall;
}
@Override
public boolean tom()
{
return antall == 0;
}
private int min()
{
int m = 0;
T minverdi = a[0];
for (int i = 0; i < antall; i++)
if (c.compare(a[i],minverdi) < 0)
{
m = i;
minverdi = a[i];
}
return m;
}
@Override
public T kikk()
{
if (tom()) throw
new NoSuchElementException("Køen er tom!");
return a[min()];
}
@Override
public T taUt()
{
if (tom()) throw new NoSuchElementException("Køen er tom!");
int m = min();
T verdi = a[m];
antall--;
a[m] = a[antall];
a[antall] = null;
return verdi;
}
@Override
public boolean taUt(T verdi)
{
int i = 0;
for (; i < antall; i++)
{
if (c.compare(a[i],verdi) == 0) break;
}
if (i == antall) return false;
antall--;
a[i] = a[antall];
a[antall] = null;
return true;
}
@Override
public String toString()
{
StringBuilder s = new StringBuilder();
s.append('[');
if (antall > 0) s.append(a[0]);
for (int i = 1; i < antall; i++)
{
s.append(',').append(' ').append(a[i]);
}
s.append(']');
return s.toString();
}
@Override
public void nullstill()
{
while (antall > 0) a[--antall] = null;
}
}