MultiMap-toteutus javalle

harja 07.04.05 09:42

Helppo toteutus C++-tyyliselle multimapille javalle.

 Tekstiversio  Arvo: 4 (8 ääntä)  Äänestä: +  -
/*
 * Kuten huomata saattaa, java.util.HashMap ja java.util.Vector mahdollistavat moisen tekemisen vain yhden metodin ylikirjoittamisella.
 * Valitettavasti ei ollut käsillä java 1.5 -kääntäjää, joten tein tämän vanhalla tyylillä. Mikäli tarvetta on, tästä saa pienellä vaivalla geneerisen version.
 *
 * Created on Apr 7, 2005
 */

package pekka;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Vector;

/**
 * @author mharju
 */

public class MultiMap extends HashMap
{

    private static final long serialVersionUID=1L;
   
    /**
     * Lisää mappiin uuden arvon. Mikäli arvo löytyy jo mapista, lisätään arvo listan päähän
     * Mikäli arvoa ei vielä löydy, lisätään uusi lista, johon arvo lisätään
     * @param key avain, jolle arvo lisätään
     * @param value lisättävä arvo
     */

    public Object put(Object key, Object value)
    {
        Vector v = null;
       
        if(this.containsKey(key))
        {
            v = (Vector) this.get(key);
        } else
        {
            v = new Vector();
        }
       
        v.add(value);
        return super.put(key, v);       
    }
   
    public static void main(String[] args)
    {
        // Ja sitten hieman testailua.

        MultiMap map = new MultiMap();
       
        map.put("kissa", "kehräävä"); map.put("kissa", "loikoileva");
        map.put("koira", "naukuva"); map.put("hylje", "makoileva");
       
        Iterator it = map.keySet().iterator();
        while( it.hasNext() )
        {
            String key = (String) it.next();
            System.out.println("Avain: "+key);
            System.out.println("Arvo: "+map.get(key).toString());
        }
    }
}