-1

我想在我的 android 音乐播放器应用程序中添加一个随机播放选项。为此,我在 java 中调用一个随机函数来返回一个介于 0 和当前播放歌曲列表大小之间的数字。问题是该函数返回与以前相同的值,并且在该值中发生重复。堆栈溢出本身有很多解决方案可以避免这个问题。该解决方案以及以下解决方案不适用于我的情况。1. 创建一个混洗数组包含 0 到最大列表大小值。它将失败,因为歌曲列表的大小是动态的。2. 洗牌歌曲列表数组本身。由于时间复杂性,它将失败。

我需要的是一个数学哈希函数,它将执行以下操作..

如果 50 是最大范围,则输入数字 1 将映射到任何其他数字,比如 34。输入 2 到任何其他数字,比如 21。输入 3 到任何其他数字,比如 10 等等。所有映射的数字都应该在 50 范围内并且不允许重复。(映射时没有联盟)也不允许映射到该数字。请注意,如果最大范围相同(在本例中为 50)并且此函数的输入数字 2 应在整个应用程序的任何时间返回值 21。

函数时间复杂度应该更低。

4

1 回答 1

0

Collections.shuffle()最初仍然可以使用。当您继续播放音乐时,请跟踪当前歌曲所在的索引。所以假设你已经播放了 7 首歌曲,目前是第 8 首。然后curr=7当您要删除一首歌曲时,在列表中找到该歌曲并将其删除。如果要插入歌曲,请随机生成 和 之间的curr + 1数字songList.size()。使用 将您的歌曲插入此处songList.add(index, element)。如果你觉得移动太耗时,那么你可以复制这个索引处的 val,将它添加到列表的末尾,然后在那个索引处插入新歌。

于 2014-07-28T18:13:37.493 回答