2012-02-26 19 views
7

ho il risultato di una lunga elaborazione. Non voglio passarlo direttamente a una HashMap e fare qualche altro calcolo. Voglio salvarlo e quindi riutilizzarlo ogni volta.Inizializza HashMap con una serie di elementi?

La mia matrice di valori si presenta così:

{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} 

C'è un modo per inizializzare una nuova HashMap passando questi valori? Forse qualcosa di simile l'inizializzazione di una matrice semplice:

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

sono le chiavi veramente interi consecutivi? –

+0

Qual è il tipo di valori nella matrice? Quale dovrebbe essere il tipo di chiavi e valori della mappa? –

+0

@BorisStrandjev sì, sono il contenuto di una versione precedente di HashMap stampata – Andrew

risposta

8

Per il problema si mette davanti a noi la soluzione migliore sarà:

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}; 

Si tratta di una sorta di mappa, dopo tutto - mappa un indice al valore corrispondente. Tuttavia, se le chiavi non sono così specifici si può fare qualcosa di simile:

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

l'unico modo per inizializzare un HashMap con i valori è quello di utilizzare i put() metodo più volte dopo aver creato l'oggetto. Questo perché il il HashMap deve fare il meccanismo di hashing per ordinare correttamente gli oggetti nella mappa per ottenere le prestazioni che garantisce.

1

Per quanto ne so, non è possibile creare un'istanza di HashMap facilmente come un array.

Cosa si può fare, è scrivere un metodo utitlity e l'uso che di creare un'istanza di una mappa:

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

La sua domanda è molto confusa. Quello che vuoi è copiare il contenuto di una mappa in un'altra mappa, usa il metodo putAll.

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

o il costruttore di copia direttamente:

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

o utilizzare il costruttore: 'HashMap (Map m)' :) –

+0

Ovviamente. Modificherò la mia risposta :-) –

+0

Che tipo di dati è oldMap? –

Problemi correlati