[英]Huge Static Array of String
將字典中有100.000個單詞的單詞存儲在靜態字符串數組中是個好主意。 我正在研究拼寫檢查器,我認為這樣會更快。
當然,將這么多字符串存儲為數組絕對不是一個好主意,特別是如果您將其用於拼寫檢查,這意味着您必須搜索並比較字符串。 由於它將始終是線性搜索,因此在數組中搜索或比較字符串效率低下
通常,對於任何不重要的事情,您都應該首選Java Collections Framework類而不是本機Java數組。 在這種特殊情況下,您擁有的是Set<String>
(因為單詞在詞典中不應出現多次)。
HashSet<String>
為基本操作add
, remove
和contains
提供恆定的時間性能,並且應與String
哈希碼公式配合使用非常好。
對於較大的詞典,您想使用專門用於存儲一組字符串(例如trie )的更復雜的數據結構,但是對於100K個單詞, HashSet
應該足夠。
內存數據庫技術(例如sqlite內存)這樣的方法如何呢?這使您可以使用有效的查詢而沒有磁盤開銷
我認為100 000並不是很大,以至於搜索無效。 當然,這取決於...如果您要檢查數組中是否存在單詞,這會很好用-這是一種線性復雜度算法。 您可以使表格保持有序排列,以便可以使用quicksort搜索算法並使之更有效。
另一方面-如果您願意查找5個最有可能的單詞(使用N-gram方法),則應考慮使用Lucene或其他文本數據庫。
也許使用SQLite數據庫會更有效? 我認為這就是firefox / thunderbird進行拼寫檢查的方法,但我不確定。
您將無法在靜態變量中存儲該數量的字符串。 Java對靜態代碼甚至方法主體都有大小限制。 只需使用一個平面文件並在類實例化時讀取它-Java比大多數人認為的要快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.