// Copyright 2003, FreeHEP.
package hep.graphics.heprep.util;

import java.util.*;

/**
 * Extends a Map and keeps a List to be able to return the list of Values.
 *
 * @author M.Donszelmann
 *
 * @version $Id: HashMapList.java,v 1.2 2004/08/30 23:14:00 duns Exp $
 */

public class HashMapList extends HashMap implements MapList {

    private List list = new ArrayList();

    public void clear() {
        super.clear();
        list.clear();
    }

    public Object put(Object key, Object value) {
        Object old = super.put(key, value);
        if (old != null) list.remove(old);
        list.add(value);
        return old;
    }

    public void putAll(Map t) {
        for (Iterator i=t.entrySet().iterator(); i.hasNext(); ) {
            Map.Entry entry = (Map.Entry)i.next();
            put(entry.getKey(), entry.getValue());
        }
    }

    public Object remove(Object key) {
        Object value = super.remove(key);
        if (value != null) list.remove(value);
        return value;
    }
    
    public Collection values() {
        return list;
    }        

    public List valueList() {
        return list;
    }
    
    public Set valueSet() {
        Set s = new HashSet();
        for (Iterator i=entrySet().iterator(); i.hasNext(); ) {
            Map.Entry entry = (Map.Entry)i.next();
            s.add(entry.getValue());
        }
        return s;
    }
}