2013-10-22 26 views
9

Attualmente sto leggendo 2 milioni di linee da un file di testo come richiesto nella domanda precedente Java Fastest way to read through text file with 2 million linesJava mettere hashmap in Treemap

Ora memorizzare queste informazioni in HashMap e voglio ordinare via TreeMap perché voglio usare ceilingkey. Il seguente metodo è corretto?

private HashMap<Integer, String> hMap = new HashMap(); 

private TreeMap<Integer, String> tMap = new TreeMap<Integer, String>(hMap); 
+1

'Collections.sort (HMAP)'? , 'Collections.sort (hMap, WITH_MY_OWN_COMPARATOR)'? –

+4

Perché non metterlo direttamente in una 'TreeMap'? Perché il passaggio in più? – Stewart

+0

hrm ... preferisco ancora ordinarlo con treemap ma dal mio codice, la treemap è vuota – BeyondProgrammer

risposta

20
HashMap<Integer, String> hashMap = new HashMap<Integer, String>(); 
TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>(); 
treeMap.putAll(hashMap); 

dovrebbe funzionare comunque.

+2

Stai scherzando ??? [Il costruttore di passaggi chiama anche] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/TreeMap.java#TreeMap.%3Cinit%3E% 28java.util.Map% 29) 'putAll()' :). Controlla il link del codice sorgente, ho aggiunto –

+0

@ sᴜʀᴇsʜ ᴀᴛᴛᴀ, c'è qualcosa di sbagliato in questo? – BeyondProgrammer

+0

@ user2822351 Non sto dicendo che questa risposta è sbagliata, quello che sto dicendo è che questa risposta è uguale a quello che stai facendo in questo momento. –

3

Questo avrebbe funzionato bene:

HashMap<Integer, String> hashMap = new HashMap<>(); 
TreeMap<Integer, String> treeMap = new TreeMap<>(hashMap); 

Ma io non consiglierei utilizzando HashMap per memorizzare l'ingresso. Finisci con due mappe con gli stessi enormi dati. O lo fai al volo e aggiungi direttamente nello TreeMap o usa la conversione da List a TreeMap.

Inoltre, per una maggiore efficienza considerare primitive collections.

1
HashMap<Integer, String> hashMap = new HashMap<Integer, String>(); 
TreeMap<Integer, String> treeMap = new TreeMap<Integer, String>(); 
hashMap.remove(null); 
treeMap.putAll(hashMap); 

HashMap permetterà nulla ma TreeMap non così prima di aggiungere in Treemap, togliere nulla dal keyset