// A class that implements the Pop interface. // Barry Cornelius, 19 June 2000 import java.util. Iterator; import java.util. Map; import java.util. Observable; import java.util. Observer; import java.util. TreeMap; public class PopImpl extends Observable implements Pop { private Map iPop; private Iterator iIterator; public PopImpl() { iPop = new TreeMap(); iIterator = null; } public synchronized boolean add(final Person pPerson) { final Object tObject = iPop.put(pPerson.getName(), pPerson); setChanged(); notifyObservers(); return tObject==null; } public synchronized boolean remove(final String pName) { final Object tObject = iPop.remove(pName); setChanged(); notifyObservers(); return tObject!=null; } //BJCHEREFIRST public synchronized Person get(final String pName) { return (Person)iPop.get(pName); } public synchronized Person getFirst() { iIterator = iPop.values().iterator(); return next(); } public synchronized Person next() { if (iIterator.hasNext()) { return (Person)iIterator.next(); } else { return null; } } public synchronized int size() { return iPop.size(); } public synchronized boolean equals(final Object pObject) { if ( pObject==null || getClass()!=pObject.getClass() ) { return false; } return iPop.equals(((PopImpl)pObject).iPop); } public synchronized int hashCode() { return iPop.hashCode(); } public synchronized String toString() { return iPop.toString(); } }