import java.util.*; class Avdeling { String navn; int antallPlasser; HashMap tattopp; HashMap venteliste; Avdeling(String navn) { this.navn = navn; tattopp = new HashMap(); venteliste = new HashMap(); } int antallLedige() { return antallPlasser - tattopp.size(); } /* Setter et barn paa venteliste til denne avdelingen. Dette gjoeres * uavhengig av om det finnes ledige plasser. Opptak foretas * separat. */ void soeknad(Barn b) { venteliste.put(b.navn, b); b.settVenteliste(this); } void fjernFraVenteliste(Barn b) { venteliste.remove(b.navn); } /* Kopierer ventelisten over i en ArrayList som sorteres slik at * eventuelle barn med prioritet ligger foerst. Utover dette skal * opptaket skje "ved loddtrekning", altsaa spiller det ingen rolle * hvordan vi sorterer barna innefor hver av kategoriene * prioritert/ikke-prioritert */ void opptak() { ArrayList soeknader = new ArrayList(); for (Barn b: venteliste.values()) { if (prioritert(b)) { soeknader.add(0,b); // Legg til foerst } else { soeknader.add(b); // Legg til sist } } // Soeknadslisten er naa sortert slik at barn med prioritet // ligger foerst i arrayen. while (antallLedige() > 0 && soeknader.size() > 0) { Barn b = soeknader.remove(0); taopp(b); } } /* I utgangspunktet har ingen barn prioritet. Denne metoden * redefineres i subklassene */ boolean prioritert(Barn b) { return false; } void taopp(Barn b) { tattopp.put(b.navn, b); fjernFraVenteliste(b); b.tattopp(this); } void slutter(Barn b) { tattopp.remove(b.navn); } void vis() { System.out.print("Avdeling " + navn + " har tatt opp foelgende barn: "); Iterator it = tattopp.values().iterator(); while (it.hasNext()) { System.out.print(((Barn)it.next()).navn + " "); } System.out.print("\nAvdelingen har foelgende barn paa venteliste: "); it = venteliste.values().iterator(); while (it.hasNext()) { System.out.print(((Barn)it.next()).navn + " "); } System.out.println(""); } }