簡體   English   中英

最快的Java字符串查找集合?

[英]fastest Java collection for string lookup?

我有一個Java類,其中包含兩個String,例如一個人的姓名和該組的姓名。

我也有一個團體名單(約10個)和一個人名單(約100個)。 我的數據對象列表更大,可以超過10.000個項目。

現在,我想搜索我的數據對象,以便從人員列表中找到具有一個人員並在組列表中具有一個組的所有對象。

我的問題是:人員列表和組列表的最佳數據結構是什么?

我可以使用ArrayList並簡單地迭代直到找到匹配項,但這顯然效率不高。 HashSet或HashMap會更好。

有沒有更有效的方法來解決這個問題? 請指教。

每個數據結構都有優點和缺點。

如果您具有訪問鍵,則使用Map來檢索O(1)中的數據。

List用於維護元素之間的順序,但是無法使用鍵訪問元素,並且您需要循環O(n)中發生的整個列表。

Trie是一個用於存儲和查找字符串的良好數據結構:

它本質上是一個樹結構,使用字符或子字符串表示要遵循的路徑。

在此處輸入圖片說明

優於哈希圖(引自Wikipedia):

  • 與不完善的哈希表相比,在最壞的情況下,O(m)時間(其中m是搜索字符串的長度)在特里中查找數據的速度更快。 不完善的哈希表可能會發生鍵沖突。 鍵沖突是不同鍵到哈希表中相同位置的哈希函數映射。 不完善的哈希表中最壞情況下的查找速度為O(N)時間,但更通常為O(1),其中O(m)時間用於評估哈希。
  • 嘗試中沒有不同鍵的沖突。 特里中的存儲桶類似於存儲鍵沖突的哈希表存儲桶,僅當單個鍵與多個值相關聯時才需要。
  • 不需要提供哈希函數或更改哈希函數,因為有更多的鍵添加到了Trie中。
  • 特里可以按鍵提供條目的字母順序。

我同意@Davide的回答。.如果我們也想快速查找並保持順序,那么可以使用Map的LinkedHashMap實現。 通過使用它,我們可以同時擁有兩件事:

  1. 數據檢索,如果我們有訪問密鑰。

  2. 我們可以保持插入順序,因此在迭代時,我們將以與插入期間相同的順序獲取數據。

根據情況(如果在接收小組/人員列表之前有數據) ,對數據進行預處理將為您節省時間。

將數據與組/人員列表進行比較將需要至少10,000+次查找。 將組/人員列表與數據進行比較將最多需要10*100 = 1,000查詢,如果一次與每個組進行比較( 10+100 = 110查詢),則查詢次數會更少。

暫無
暫無

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

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