När man behöver kunna lägga till, ta bort, byta prio på element osv så brukar det väl handla om någon form av träd eller länkad datastruktur, men om iteration är den operation som du vill optimera för så blir det lite svårare att välja eftersom iteration över länkade datastrukturer är långsamt på moderna processorer. Att du använder Java gör det ännu svårare att säga något bestämt eftersom vi inte vet hur garbage collectorn packar ihop objekten i trädet. Det jag tänker på är alltså cacheprestandan. Inget är snabbare att iterera över än en array, så om de andra operationerna är tillräckligt sällsynta kanske du kan använda en array och sortera om den vid behov?
Nu läste jag om Javas prioritetskö och de verkar ju tycka att man ska sortera kön till en array när man vill iterera över den. Det borde väl passa bra?
http://java.sun.com/j2se/1.5.0/docs/api/java/util/PriorityQue...