Mapas de claves (HashMaps) en Java

/* Ejemplo de mapa de claves: creación, introducción de claves y valores, lectura de los pares key-value, mapa de frecuencias (value) de un conjunto de datos (key), dualidad key-value or value-key. */

package maps;

import java.util.*;

/*
 * @author AFR, RLR
 */

public class Maps {

    public static void main(String[] args) 
    {

        //EJEMPLO1
        Map<Object,String> mp=new HashMap<>();
        //Map<Integer,String> mp=new HashMap<>();       

        // AÑADIR key & value pair AL MAP
        mp.put(new Integer(2), "HOLA");
        mp.put(new Integer(1), "ADIOS");
        mp.put(new Integer(3), "MAÑANA");
        mp.put(new Integer(4), "HOY");
        mp.put(new Integer(2), "HOLA1");
        //mp.put(2, "HOLA11");

        //EJEMPLO2
        Map<Object,String> mpr=new HashMap<>();
        //Map<Double,String> mp=new HashMap<>();

        // AÑADIR key & value pair AL MAP
        mpr.put(new Double(2), "HOLAr");
        mpr.put(new Double(1), "ADIOSr");
        mpr.put(new Double(3), "MAÑANAr");
        mpr.put(new Double(4), "HOYr");
        mpr.put(new Double(2), "HOLA1r");

        //PASAR Map A Set-interface PARA SACAR key & value
        Set s=mp.entrySet();
        //Set s=mpr.entrySet();

        //MOVER CON ITERATOR A PROXIMO key & value DEL MAP 
        Iterator it=s.iterator();

        while(it.hasNext())
        {
            // ENTRADA DEL MAP Map.Entry PATA OBTENER key & value
            Map.Entry m =(Map.Entry)it.next();

            // getKey PARA OBTENER key 
            int key=(Integer)m.getKey();
            //double key=(double)m.getKey();

            // getValue PARA OBTENER value
            String value=(String)m.getValue();

            System.out.println("Key :"+key+"  Value :"+value);
        }

        //EJEMPLO MAS AVANZADO
        System.out.println("\nManejo de Maps de frecuencias: ");  
        pruebaMaps();                

    }

    // METODOS

    public static void pruebaMaps() 
    {
        String[] x = {"Esta", "es", "una", "coleccion", "es", "una",
                      "Otra", "coleccion", "mas", "coleccion", "es"};

        System.out.println(frecuencias(x));

       Map<String,Integer> f = frecuencias(x);
       System.out.println(f);

       //PARA CADA KEY UN SET
       Map<String,Set<Integer>> mm = creaMultiMap(f);
       //Map<String,Set<Integer>> mm = creaMultiMap(f,90);
       System.out.println(mm);

       //AGRUPAMIENTO DE KEYS POR FRECUENCIAS: MAPA INVERSO
       Map<Integer,Set<String>> inv = multimapInversa(mm);
       System.out.println(inv);
    }

    public static <T> Map<T,Integer> frecuencias(T[] x) 
    {
        Map<T,Integer> res = new HashMap<>();
        for(T elto : x) 
        {
            Integer frec = res.get(elto);
            if (frec==null) 
            {
                frec = 1;
            } 
            else 
            {
                frec++;
            }
            res.put(elto, frec);
        }
        return res;
    }

    public static <K,V> Map<K,Set<V>> creaMultiMap(Map<K,V> map) 
    //public static <K,V> Map<K,Set<V>> creaMultiMap(Map<K,V> map,V y)
    {
        Map<K,Set<V>> res = new HashMap<>();
        for(K k : map.keySet()) 
        {
            Set<V> set = new HashSet<>();
            //OBTIENE EL VALUE DONDE KEY IS MAPPED
            set.add(map.get(k)); 
            //set.add(y); //AÑADIMOS OTRO ELEMENTO A CADA SET
            res.put(k, set);
        }
        return res;
    }

    public static <K,V> 
            Map<V,Set<K>> multimapInversa(Map<K,Set<V>> map) 
    {
        Map<V,Set<K>> res = new HashMap<>();
        for(K k : map.keySet()) 
        {
            for(V v : map.get(k)) 
            {
                //VALOR A DONDE V ES MAPEADO
                Set<K> clavesDe_v = res.get(v); 

                if (clavesDe_v==null) 
                {
                    clavesDe_v = new HashSet<>();
                    res.put(v, clavesDe_v);
                }
                clavesDe_v.add(k);
            }
        }
        return res;
    }        

}
About these ads
Esta entrada fue publicada en Ciencia y programación. Guarda el enlace permanente.

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s