的大量好了,解釋這個問題,問題...哪些數據結構,用來存儲字符串
我:
充滿了數以百萬計的條目(一張大數據庫表中的每個條目可具有「 n「列數量)。
的概念:(前「可用」和「選擇」)
我想展現給一個網絡接口兩個列表。 當用戶將條目從一個列表移動到另一個列表時,我需要將條目的unique-id(字符串類型)臨時存儲到我的服務器中名爲「selected」的「未知數據結構」中,並且當用戶最終點擊提交我會將這個列表進一步傳遞給其他應用程序。
對數據庫進行排序和篩選,然後將全部數據量(以塊爲單位)加載回java,然後檢查每個條目是否被選中並將添加到將要去的列表中顯示在Web界面中。
for each entry{
if(selected.contains(currentEntry.ID)){
selectedList.add(currentEntry)
}else{
availableList.add(currentEntry)
}
}
名單selectedList和availableList將只持有幾百項(那些顯示給用戶,以最大100-200條目約頁)這樣一類的列表「項」是不夠好,持有我的排序。
問題:
結構「selected」必須包含數以千計的ID(有時可能達到百萬)。
需要:
我需要快速訪問來查找id是否存在(structure.contains(id)),所以我肯定會使用散列結構。 我需要使用最小內存資源的結構。
非需要:
不需要良好的刪除性能。排序是不需要的。
設置將是我認爲最好的。 – 2013-04-26 12:23:06
如果它必須保存這麼多的條目,你應該將它轉儲到數據庫表中,並附加一個額外的ID(例如某種類型的會話標識) – 2013-04-26 15:20:22
經過大量測試後,我意識到所有的Hash結構(HashSet, LinkedHashMap等)執行大致相同。 TreeSet是我測試的性能較差的結構,需要最多的時間來查找和元素。 當我超過200.000個元素(當然,這與硬件等有關)時,我開始面臨溢出到我的測試系統的問題。 我可能會去解決方案使用數據庫表來保存選定的ID和直接從數據庫使用連接獲取數據(無論哪種方式我會使用數據庫進行排序和過濾) 感謝您的幫助。 – Stef 2013-05-03 12:22:12