基本上我正在创建一个Android音乐播放器。我已经设法将STRING存储到我库中每首歌的“评论”部分。
String的形式如下。 “吉他,鼓,西班牙语,悲伤”
现在我的担心是在我的代码中提出一个数据结构来移动这个mp3文件(它的路径)以及这个STRING。更具挑战性的是:
上面看到的字符串由逗号“,”组成,所以每次用户想要创建播放列表时,他们只会给我一个单词列表(TAGS),我必须查看每首歌才能查找如果它有TAG他们正在寻找。我这样做是通过将存储在歌曲的COMMENT部分中的字符串拆分为子字符串(TAGS)并在用户输入时将其匹配。
我正在寻找一个良好的数据结构的建议。
我应该事先拆开评论部分并将其保存在某种集合中吗?还是在我循环播放每首歌的时候呢?分开它来检查输入?
我想过使用ArrayList> 但也许有更好的方法...
答案 0 :(得分:1)
Arraylist在我看来是好的方式,因为你会有一个我想的不同TAGS列表。
但我建议不要使用字符串作为类型,也许你应该使用一个标记类列表,这将在你需要进行更改时为将来提供更大的灵活性。
希望它有所帮助。
答案 1 :(得分:1)
如果歌曲列表很长,反向索引会更合适。这不是循环遍历每首歌曲并检查是否包含标签,您可以直接找到标签并提取与其关联的歌曲列表。直接跳转到标签可以使用Map完成,在条目中,值可以是歌曲列表。
Map<String, List<Song>> tagIndex
我假设Song是一个抽象歌曲的课程。
如果无法保留索引,则可以在后台启动时构建它。
EDIT-1 :(回复第一条评论)
我认为所有Android设备都提供SQLite。如果这确实是一个易于集成的情况,那么有几种方法可以存储和访问标记。
在第一种方法中,标签将在应用程序重新安装后继续存在。但是其他应用程序也可以访问注释,这些注释可能以其他方式使用它或编辑/覆盖您的值。在这种方法中,您必须在应用程序安装时构建索引,并在构建初始索引后保持注释和数据库同步。
第二种方法部分类似于第一种方式,其中标签存储在数据库中并在旅途中进行维护。但是如果没有安装应用程序,则没有初始构建和标记可能会被删除。这可能是也可能是不可接受的,但这种方法比第一种方法简单。
如果使用SQLite,则根本不需要在内存中维护标记。一切都可以在数据库中维护。
表:tag_index
列:(tag_name,song_name,song_path)