簡體   English   中英

巨大的字符串靜態數組

[英]Huge Static Array of String

將字典中有100.000個單詞的單詞存儲在靜態字符串數組中是個好主意。 我正在研究拼寫檢查器,我認為這樣會更快。

當然,將這么多字符串存儲為數組絕對不是一個好主意,特別是如果您將其用於拼寫檢查,這意味着您必須搜索並比較字符串。 由於它將始終是線性搜索,因此在數組中搜索或比較字符串效率低下

通常,對於任何不重要的事情,您都應該首選Java Collections Framework類而不是本機Java數組。 在這種特殊情況下,您擁有的是Set<String> (因為單詞在詞典中不應出現多次)。

HashSet<String>為基本操作addremovecontains提供恆定的時間性能,並且應與String哈希碼公式配合使用非常好。

對於較大的詞典,您想使用專門用於存儲一組字符串(例如trie )的更復雜的數據結構,但是對於100K個單詞, HashSet應該足夠。

也可以看看

內存數據庫技術(例如sqlite內存)這樣的方法如何呢?這使您可以使用有效的查詢而沒有磁盤開銷

我認為100 000並不是很大,以至於搜索無效。 當然,這取決於...如果您要檢查數組中是否存在單詞,這會很好用-這是一種線性復雜度算法。 您可以使表格保持有序排列,以便可以使用quicksort搜索算法並使之更有效。

另一方面-如果您願意查找5個最有可能的單詞(使用N-gram方法),則應考慮使用Lucene或其他文本數據庫。

也許使用SQLite數據庫會更有效? 我認為這就是firefox / thunderbird進行拼寫檢查的方法,但我不確定。

您將無法在靜態變量中存儲該數量的字符串。 Java對靜態代碼甚至方法主體都有大小限制。 只需使用一個平面文件並在類實例化時讀取它-Java比大多數人認為的要快。

請參見枚舉超過了靜態初始化程序的65535字節限制...最好怎么辦?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM