Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android中歌曲的数据结构_Java_Android_Data Structures_Collections - Fatal编程技术网

Java Android中歌曲的数据结构

Java Android中歌曲的数据结构,java,android,data-structures,collections,Java,Android,Data Structures,Collections,基本上,我正在创建一个android音乐播放器。我已经设法将一个字符串存储到我的库中每首歌曲的“评论”部分 弦的形式为“吉他、鼓、西班牙语、悲伤” 现在,我关心的是在我的代码中,找到一个数据结构,在这个mp3文件(它的路径)和这个字符串之间移动。更具挑战性的是: 你在上面看到的字符串是由逗号“,”组成的,所以每当用户想要创建一个播放列表时,他们只会给我一个单词(标签)列表,我必须查看每首歌曲,看看它是否有他们想要的标签。我通过将歌曲注释部分中存储的字符串拆分为子字符串(标记),并在用户输入时进行

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

弦的形式为“吉他、鼓、西班牙语、悲伤”

现在,我关心的是在我的代码中,找到一个数据结构,在这个mp3文件(它的路径)和这个字符串之间移动。更具挑战性的是:

你在上面看到的字符串是由逗号“,”组成的,所以每当用户想要创建一个播放列表时,他们只会给我一个单词(标签)列表,我必须查看每首歌曲,看看它是否有他们想要的标签。我通过将歌曲注释部分中存储的字符串拆分为子字符串(标记),并在用户输入时进行匹配来实现这一点

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

我是否应该先拆分评论部分,并将其保存在某种集合中?还是像我在循环播放每首歌那样去做?将其拆分以对照输入进行检查

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

我认为Arraylist是一种好方法,因为我想你会有一个不同标签的列表

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


希望有帮助。

如果歌曲列表较长,则反向索引更合适。这不是在每首歌曲中循环并检查是否包含标签,而是可以直接找到标签并提取与之相关联的歌曲列表。直接跳转到标签可以通过使用地图来完成,在条目中,值可以是歌曲列表

Map标记索引
我假设Song是一个抽象歌曲的类

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

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

我认为所有Android设备都有SQLite可用。如果这种情况确实很容易集成,那么有几种方法可以存储和访问标签

  • 在数据库和注释中存储标记
  • 仅在数据库中存储标记
  • 在第一种方法中,标签将在应用程序重新安装后仍然有效。但其他应用程序也可以访问注释,这些应用程序可能以其他方式使用注释,或者编辑/覆盖您的值。在这种方法中,您必须在应用程序安装时构建索引,并在构建初始索引后保持注释和数据库的同步

    第二种方法部分类似于第一种方法,其中标签存储在数据库中,并在运行中维护。但并没有初始版本,若应用程序未安装,标签可能会被删除。这可能是可以接受的,也可能是不可以接受的,但这种方法比第一种方法简单

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

    表:标签索引

    列:(标记名称、歌曲名称、歌曲路径)


    Ryan,我只能将一个字符串值存储到每首歌曲的评论部分,但当然每次我检索它时,我都会将它精确地拆分为子字符串(标记)列表,所以如果你可以将其拆分为子字符串,那又有什么问题呢?你可以使用stringTokenizer来拆分标记(老式的方式),我应该提前这样做吗?或者,当用户想要通过输入一些他想要播放列表的标签来创建一个播放列表时,系统会检查每首歌曲,将其拆分为标签列表,检查歌曲是否有用户想要的标签,或者移动到下一首歌曲…循环整个库。是的,我认为你应该提前这样做,所以当用户来时,标签都准备好了。这更有意义,我会接受这个作为答案,只要我能绕着它转。因为我仍然需要找到每个独特的标签如何将所有歌曲映射到它,对吗?再次检查每个歌曲标签,看看它是否存在?请参见编辑-1。评论中没有足够的字符。从两个方面来说,你指的是SQLite和Map。。。我只是快速浏览了一下SQLite,我认为它的命令行和通过手机界面使用它会很困难,不是吗?Android为SQLite提供了一个API。API在下面的链接中看起来很简单。这真的很有帮助,在第一种方法中只有一个问题,“在db和comments中存储标记”是什么意思,因为如果将注释部分拆分为子字符串,它会生成标记,其中每首歌曲将包含不同的标记(作为一个长注释/字符串),因此comment is标记是相同的
    Map<String, List<Song>> tagIndex