2012-08-01 34 views
2

基本上我創建了一個Android音樂播放器。我已經設法將STRING存儲到我的圖書館中每首歌曲的「評論」部分。Android中歌曲的數據結構

該字符串是形式例如。 「吉他,鼓,西班牙語,傷心」

現在我的顧慮是要拿出一個數據結構來解決這個MP3文件(路徑)以該字符串一起移動,在我的代碼。是什麼讓它更具挑戰性是:

上面看到的字符串是由逗號「,」所以每當用戶想創建一個播放列表,他們只會給我一個單詞列表(標籤)和我必須看看每首歌曲,看看是否有他們正在查找的TAG。我通過將存儲在歌曲的COMMENT部分中的字符串拆分爲子字符串(TAGS)並在用戶輸入時匹配它。

我在尋找一個好的數據結構的建議。

我應該事先分裂註釋部分,並保持它在某種收集的?或者當我循環播放每首歌曲時這樣做?將它分割以根據輸入檢查它?

我想用的ArrayList> 的,但也許有一個更好的辦法...

回答

1

反向索引將更加合適的,如果歌曲列表很長。這不是循環播放每首歌曲,而是檢查是否包含標籤,您可以直接找到標籤並提取與其關聯的歌曲列表。直接跳轉到標籤可以通過使用Map來完成,並且在一個條目中該值可以是歌曲列表(S)。

Map<String, List<Song>> tagIndex 

我假設宋是一個抽象歌曲的類。

如果其無法堅持它可以在後臺啓動建立索引。

EDIT-1:(回覆的第一個評論)

我認爲所有的Android設備都使用的SQLite。如果這確實是一種容易集成的情況,那麼您可以通過幾種方式來存儲和訪問標籤。

  1. 數據庫和評論商店標籤。
  2. 僅在數據庫中存儲標籤。

在第一種方法的標籤將生存的應用程序重新安裝。但是,其他應用程序也可以使用其他應用程序的註釋,這些應用程序可能以其他方式使用它或編輯/覆蓋您的值在這種方法中,您必須在應用程序安裝時構建索引,並在構建初始索引後隨時保持評論和數據庫同步。

第二種方法與第一種方式部分相似,其中標籤存儲在數據庫中並在旅途中保持。但是,如果應用程序未安裝,則沒有初始構建並且標記可能會被擦除。這可能會也可能不會被接受,但這種方法比第一種方法更簡單。

如果使用SQLite,則根本不需要在內存中維護標記。一切都可以在數據庫中維護。

表:tag_index

列:(TAG_NAME,SONG_NAME,song_path)

+0

這使得更多的意義,我會接受這個答案,只要我可以圍繞它的頭。因爲我仍然需要找出每個獨特的TAG如何將所有歌曲映射到正確的位置?再次檢查每首歌曲TAG,看看它是否存在? – Achilles 2012-08-01 05:27:38

+0

請參閱EDIT-1。沒有足夠的評論。 – sgp15 2012-08-01 10:38:38

+0

通過幾種方式,你的意思是SQLite和Map ...只是快速瀏覽一下SQLite,我認爲它的命令行並通過手機界面使用它會很困難,不是嗎? – Achilles 2012-08-01 10:41:37

1

ArrayList中就是這樣,在我看來不錯,因爲你將有不同的標籤我猜想名單。

但是我建議不要使用字符串作爲類型,也許你應該使用一個標籤類的列表,當你需要進行更改時,它會給你更多的靈活性。

希望它有幫助。

+0

瑞安,我可以將字符串值只存儲到每首歌曲的註釋部分,但當然我每次檢索它,我把它分成一個子字符串列表(標籤) – Achilles 2012-08-01 03:11:23

+0

確切地說,如果你可以將它分成sub_string,那麼有什麼問題? – 2012-08-01 03:13:06

+0

你可以使用stringTokenizer打破標籤(老派的方式) – 2012-08-01 03:14:56