我正在制作音乐流媒体应用程序。其中一个功能是播放队列,就像Spotify一样,歌曲将自动播放您开始播放的艺术家,专辑或播放列表,或播放您已排队的歌曲(如果有的话)。
我正在考虑我需要什么样的数据结构。我目前正在权衡使用优先级队列的选项,其中排队的歌曲优先于非排队的歌曲;或两个普通队列,一个自动队列和一个排队的歌曲队列。我也愿意接受任何更好的解决方案。
我应该选择哪种数据结构?
答案 0 :(得分:4)
最有可能是两个队列。
使用优先级队列(至少一个heap)操作需要O(log n),其中 - 因为它需要带有两个队列的O(1)。并不是它会产生巨大的差异,除非你有一个超级性能关键应用程序并且有足够的项目来实际产生显着的差异(并且堆可能会带来足够的开销以使其变慢小n
)。
两个队列也应该使稍微更简单,更容易理解的实现,这应该是决定因素。
对于选择的歌曲,你不能只有一个队列吗?如果队列为空,则可以随机生成下一个,假设您不想显示将要播放但未在队列中的下几首歌曲。
随机音符 - 你可能想要跟踪已播放的歌曲以最小化生成的歌曲,从而消除同一首歌经常播放的可能性 - 为此你可以使用hash table