2012-02-26 23 views
7

Tengo el resultado de un procesamiento largo. No quiero pasarlo directamente a HashMap y hacer más cálculos. Quiero guardarlo y luego reutilizarlo todo el tiempo.¿Inicializar HashMap con una variedad de elementos?

Mi matriz de valores se ve así:

{0=0, 1=15, 2=70, 3=90, 4=90, 5=71, 6=11, 7=1, 8=61, 9=99, 10=100, 11=100, 12=100, 13=66, 14=29, 15=98, 17=100, 16=100, 19=100, 18=100, 21=62, 20=90, 23=100, 22=100, 25=100, 24=100, 27=91, 26=100, 29=100, 28=68, 31=100, 30=100, 34=83, 35=55, 32=100, 33=100, 38=100, 39=100, 36=100, 37=100, 42=10, 43=90, 40=99, 41=33, 46=99, 47=40, 44=100, 45=100, 48=2} 

¿Hay alguna manera para inicializar un nuevo HashMap pasando estos valores? Tal vez algo así como la inicialización de una matriz simple:

float[] list={1,2,3}; 
+1

¿Las teclas son realmente enteros consecutivos? –

+0

¿Cuál es el tipo de valores en la matriz? ¿Cuál debería ser el tipo de claves y valores del mapa? –

+0

@BorisStrandjev sí, son el contenido de una impresión previa de HashMap – Andrew

Respuesta

8

Para el problema se pone delante de nosotros la mejor solución será:

int [] map = 
    {0, 15, 70, 90, 90, 71, 11, 1, 61, 99, 100, 100, 100, 66, 29, 98, 100, 100, 
    100, 100, 90, 62, 100, 100, 100, 100, 100, 91, 68, 100, 100, 100, 100, 100, 
    83, 55, 100, 100, 100, 100, 99, 33, 10, 90, 100, 100, 99, 40, 2}; 

Se trata de una especie de mapa después de todo - asigna un índice al valor correspondiente. Sin embargo, si sus claves no son tan específicas, puede hacer algo como:

int [][] initializer = 
    {{0, 0}, {1, 15}, {2, 70}, {3, 90}, {4, 90}, {5, 71}, {6, 11}, {7, 1}, {8, 61}, 
    {9, 99}, {10, 100}, {11, 100}, {12, 100}, {13, 66}, {14, 29}, {15, 98}, 
    {17, 100}, {16, 100}, {19, 100}, {18, 100}, {21, 62}, {20, 90}, {23, 100}, 
    {22, 100}, {25, 100}, {24, 100}, {27, 91}, {26, 100}, {29, 100}, {28, 68}, 
    {31, 100}, {30, 100}, {34, 83}, {35, 55}, {32, 100}, {33, 100}, {38, 100}, 
    {39, 100}, {36, 100}, {37, 100}, {42, 10}, {43, 90}, {40, 99}, {41, 33}, 
    {46, 99}, {47, 40}, {44, 100}, {45, 100}, {48, 2}}; 
Map<Integer, Integer> myMap = new HashMap<Integer, Integer>(); 
for (int i = 0; i < initializer.length; i++) { 
    myMap.put(initializer[i][0], initializer[i][1]); 
} 
2

la única manera de inicializar una HashMap con valores es mediante el uso de las put() método varias veces después de crear el objeto. Esto es porque el HashMap necesita hacer el mecanismo de hash para ordenar apropiadamente los objetos en el mapa para lograr el rendimiento que garantiza.

1

Por lo que yo sé, no se puede crear una instancia de un Hashmap tan fácilmente como una matriz.

Lo que puede hacer, es escribir un método utitlity y el uso que crear una instancia de un mapa:

Map<Integer, Integer> createMap(Integer[] array) { 
    Map<Integer, Integer> map = new HashMap<Integer, Integer>(); 
    for(int i = 0; i < array.length; i++) { 
     map.put(i, array[i]); 
    } 
    return map; 
} 
2

Su pregunta es muy confuso. Lo que quiere es copiar el contenido de un Mapa a otro Mapa, use el método putAll.

Map<Integer, Integer> newMap = new HashMap<Integer, Integer>(); 
newMap.putAll(oldMap); 

o el constructor de copia directa:

Map<Integer, Integer> newMap = new HashMap<Integer, Integer>(oldMap); 
+0

o use el constructor: 'HashMap (Map m)' :) –

+0

Por supuesto. Voy a editar mi respuesta :-) –

+0

¿Qué tipo de datos es oldMap? –

Cuestiones relacionadas