2

基本上我正在创建一个 android 音乐播放器。我已经设法将一个字符串存储到我库中每首歌曲的“评论”部分。

字符串的形式为例如。“吉他,鼓,西班牙语,悲伤”

现在我关心的是在我的代码中提出一个数据结构来移动这个 mp3 文件(它的路径)以及这个 STRING。使其更具挑战性的是:

您在上面看到的字符串由逗号“,”组成,因此每次用户想要创建播放列表时,他们只会给我一个单词列表(标签),我必须查看每首歌曲以查找它是否有他们正在寻找或不寻找的标签。我通过将存储在歌曲 COMMENT 部分中的字符串拆分为子字符串(标签)并在用户输入时匹配它来做到这一点。

我正在寻找一个好的数据结构的建议。

我应该事先拆分 COMMENT 部分并将其保存在某种集合中吗?还是在我循环播放每首歌时这样做?拆分它以根据输入检查它?

我想过使用 ArrayList > 但也许有更好的方法......

4

2 回答 2

1

在我看来,Arraylist 是好的方法,因为我想你会有一个不同标签的列表。

但我建议不要使用字符串作为类型,也许您应该使用标签类列表,这将在您需要进行更改时为您提供更大的灵活性。

希望能帮助到你。

于 2012-08-01T03:08:47.400 回答
1

如果歌曲列表很长,反向索引会更合适。这不是遍历每首歌曲并检查是否包含标签,您可以直接找到标签并提取与其关联的歌曲列表。可以使用 Map 直接跳转到标签,并且在条目中,值可以是歌曲列表。

Map<String, List<Song>> tagIndex

我假设 Song 是一个抽象歌曲的类。

如果无法持久化索引,则可以在后台启动时构建它。

EDIT-1:(回复第一条评论)

我认为所有的 Android 设备都有 SQLite 可用。如果这确实是易于集成的情况,那么您可以通过多种方式存储和访问标签。

  1. 将标签存储在数据库和评论中。
  2. 仅将标签存储在数据库中。

在第一种方法中,标签将在应用程序重新安装后继续存在。但是其他应用程序也可以访问评论,这些应用程序可能会以其他方式使用它或编辑/覆盖您的值。在这种方法中,您必须在应用程序安装时构建索引,并在构建初始索引后随时保持评论和数据库同步。

第二种方法部分类似于第一种方法,其中标签存储在数据库中并在旅途中维护。但是没有初始构建,如果卸载应用程序,标签可能会被删除。这可能会或可能不会被接受,但这种方法比第一种方法更简单。

如果使用 SQLite,则根本不需要在内存中维护标签。一切都可以在数据库中维护。

表:tag_index

列:(tag_name、song_name、song_path)

于 2012-08-01T04:22:00.007 回答