2012-07-07 181 views
1

因此,我有一個包含70,000行按字母順序排列的字典文件。每一行都是帶有翻譯的單獨單詞。你會推薦什麼作爲在這樣的文件中搜索的最佳做法?我正在考慮文件索引,但可能有更好的方法。在大文本文件(java)中搜索

回答

3

使用Java NIO的內存映射文件支持所有,內存映射它的第一次。其次,預處理它以查找新條目開始的所有偏移量。最後,編寫一些可以查找條目的二進制搜索代碼。我認爲這可能是最輕量級和內存效率的解決方案。

Lucene還使用跳過列表:您還可以每隔16次(或左右)進入內存並在二進制搜索的第一階段中使用它。然後,您必須轉到實際文件才能確切輸入。

+0

我的文件只有5 MB的內存,你認爲內存映射會給我一個更好的性能?我一直在考慮跳轉條目並實現二進制搜索,但是我還沒有發現任何技巧,如何在java中的文件行之間跳轉,你會給我一些提示嗎? – user1049280 2012-07-07 13:27:03

+0

我將使用這個代碼爲Linux,無論是爲Android。我聽說Lucene在android上無法正常工作。 – user1049280 2012-07-07 13:35:48

+0

我不推薦Lucene--我剛剛提到了它在實現中使用的一個技巧,因爲在這方面它是一個非常好的角色模型。內存映射文件使用起來很輕鬆(它給你一個類似於數組的文件視圖),所以它對你來說是雙贏的:更簡單的API以獲得更好的性能。當然,你總是可以選擇將整個文件作爲String [70000] [2]'加載到RAM中。這種解決方案只是沒有樂趣,這就是全部:) – 2012-07-07 14:09:59

1

這可能是一個解決方案項目Lucene

+0

你可以通過解釋Lucene的作用以及爲什麼它適合這個問題來提高答案的質量。 – 2015-07-17 10:58:15