2013-10-22 25 views
9

Jestem obecnie czytania 2 mln wiersze z pliku tekstowego jako zadawane w poprzednim pytaniu Java Fastest way to read through text file with 2 million linesJava oddanie HashMap do TreeMap

Teraz przechowywać te informacje w HashMap i chcę rozwiązać to poprzez TreeMap ponieważ chcę używać suwak. Czy następująca metoda jest poprawna?

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

Dlaczego po prostu umieścić go bezpośrednio w "TreeMap"? Po co dodatkowy krok? – Stewart

+0

hrm ... nadal wolę sortować go z treemapem, ale jak na mój kod, treemap jest pusty – BeyondProgrammer

Odpowiedz

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

Powinna działać tak.

+2

Po prostu żartujesz ??? [Przekazuje również konstruktor] (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()' :). Sprawdź link do kodu źródłowego, dodałem –

+0

@ sᴜʀᴇsʜ ᴀᴛᴛᴀ, czy coś jest z tym nie tak? – BeyondProgrammer

+0

@ user2822351 Nie mówię, że ta odpowiedź jest błędna. Mówię tylko, że ta odpowiedź jest równa temu, co teraz robisz. –

3

To będzie działać dobrze:

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

Ale nie radzę korzystając HashMap przechowywać dane. W końcu masz dwie mapy zawierające te same ogromne dane. Zrób to w locie i dodaj bezpośrednio do TreeMap lub użyj konwersji List do TreeMap.

Również, dla jeszcze większej efektywności, należy rozważyć 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 pozwoli zerowa ale TreeMap nie tak przed dodaniem do TreeMap, usunąć zerowy od Keyset