2012-11-27 50 views
1

我有大量的字符串在我的Android應用程序中被分爲三類:1個字符串,2個字符串,3個字符串。我需要能夠搜索這三個字符串列表,快速查找給定鍵的匹配並返回與這些字符串關聯的第三個值。最有效的方式來存儲和搜索大量的字符串

舉例來說,如果我要找的關鍵"New York"和我的名單是:

New York, test1 
New Jersey, test2 
Colorado, test3 
Arkansas, test4 
New York, test5 

一個搜索將返回字符串:test1 and test5

什麼是存儲這些字符串搜索的最佳途徑對於比賽是最快的android手機?

我到目前爲止想到的選項是:database,xml,csv。有沒有其他的選擇,什麼是這種情況的最佳選擇?

編輯: 如果我想保留這些項目的順序以便它們可以在列表中向上或向下移動,那麼我知道Hashmap是無序的。數據列表工作?

+2

絕對跳過xml。除了負面意義之外,xml和速度通常不會用在同一句話中。考慮使用本地sqlite工具(例如數據庫)。 –

+0

謝謝我會看看,我沒有太多的SQL或SQLite的經驗,但我可以學習 – Peter

+1

關於SQLite:有一個全文搜索擴展可能是有用的http://www.sqlite。 org/fts3.html/http://stackoverflow.com/questions/6339022/sqlite3-fts4-match-and-android – zapl

回答

1

爲什麼不將它們存儲爲鍵和值列表之間的映射,並使用Android內置的SQLLite數據庫將它們永久保存在那裏?

所以基本上,而不是你的列表,你會:

New York: [test1, test5] 
New Jersey: test2 
Colorado: test3 
Arkansas: test4 

保持紐約獨特的,你會得到的結果要快得多。在傳統的數據庫意義上,它將成爲你價值觀的外鍵。

1

分析文件,分割使用,作爲分隔符每行。創建哈希表(的java.util.Map implentations之一),並把分析結果的出現,讓New York是存儲在列表中的關鍵和test1test5等都值:

Map<String, Collection<String>> map = new HashMap<>();

現在你有這個直接訪問表,並且可以隨時查找任何城市的地圖。

+0

當你說解析我的文件,你的意思是我應該存儲的字符串列表中說一個csv文件,然後每次我在手機上啓動應用程序時,都會將文件中的列表加載到散列表中?每次啓動應用程序時都不會花費大量時間? – Peter

相關問題