2013-10-22 160 views
9

我正在閱讀從文本文件200萬線的要求在前面的問題 Java Fastest way to read through text file with 2 million lines的Java將哈希映射成樹形

現在我保存這些信息到HashMap的,我想是因爲我想用通過TreeMap的排序呢ceilingkey。以下方法是否正確?

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

爲什麼不直接把它放到'TreeMap'中?爲什麼額外的步驟? – Stewart

+0

hrm ...我仍然喜歡用treemap排序,但是至於我的代碼,treemap是空的 – BeyondProgrammer

回答

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

無論如何都應該工作。

+2

你只是在開玩笑? [傳遞構造函數也調用](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()':)。檢出源代碼鏈接,我加了 –

+0

@sᴜʀᴇsʜᴀᴛᴛᴀ,這有什麼不對嗎? – BeyondProgrammer

+0

@ user2822351我不是說這個答案是錯誤的,我說的是這個答案等於你現在正在做的事情。 –

3

這會工作得很好:

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

但使用HashMap存儲輸入我不會建議。你最終會得到兩個擁有相同大量數據的地圖。要麼在飛行中直接添加到TreeMap或使用ListTreeMap轉換。

另外,爲了獲得更高效率,請考慮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允許空但不TreeMap中因此增加成樹形圖之前,從鍵集