2014-02-10 170 views
0
int index = Collections.binarySearch(myList, SearchWord); 
System.out.println(myList.get(index)); 

實際上,我將100萬個單詞存儲到數組列表中,現在我需要通過鍵搜索特定的單詞。結果不是一個單詞,它可能包含多個單詞。ArrayList搜索多個單詞

例如假設我輸入「A」表示輸出是[Aarhus,Aaron,Ababa,...]。結果取決於搜索詞。我如何做到這一點,哪些排序算法在集合中最好。

+0

根據您的要求,您必須選擇特殊數據結構。這將以簡單的方式爲您提供您需要的東西(Suggester)。 –

+1

您的搜索類型最符合模糊搜索。我建議你爲它選擇一個搜索引擎。像Appache lucene,它將非常快速,可靠且易於管理。另外保留一百萬字的數列不是一個好主意。 –

+0

關於你的例子,你是否總是需要以特定字符串開頭的單詞? – wdosanjos

回答

0

選項:

  1. 如果你想堅持到數組列表,排序它在進行搜索之前。然後找到與您的搜索條件相匹配的第一個鍵,並從中迭代,直到找到不匹配的鍵。將所有匹配的鍵收集到一些緩衝區結構中賓果,你有你的答案。
  2. 將數據結構更改爲樹。
    1. 一個簡單的二叉樹 - 你的所有鍵都自動排序。第一種方式深入瀏覽樹。直到你找到一個不匹配的密鑰。
    2. 花式特里結構。通過這種方式,您可以自動對所有密鑰進行排序,並且由於存儲效率高,您可以顯着提升性能。休息是一樣的,導航樹,收集匹配的關鍵。