如何取消名单?

Ank*_*ava 2 java sorting algorithm android

我正在使用Collections.shuffle(list); 洗牌列表,但我不知道如何取消洗牌?我正在考虑在洗牌之前保存列表然后将其洗牌以便维护备份并且可以在需要时重新恢复,但这似乎效率低下这样做的方式,将占用时间和记忆....如果你知道一个更合乎逻辑的方式,你能详细说明吗?顺便说一句,这是我的应用程序的样子:D

在此输入图像描述

在此输入图像描述

Jon*_*eet 5

没有这种无拘无束的概念 - 例如,在你洗牌后,你会如何回到以前的状态?

如果您的原始收藏品以某种明确的方式订购,请再次对其进行排序.否则(例如,如果它是手工订购的)你必须在洗牌之前复印一份.

理论上你可以:

  • 生成随机种子并记住它
  • 创建一个Random并将其传递给shuffle
  • 之后,创建一个ArrayList<Integer>从0到大小(独家)
  • Random使用原始种子创建的新列表随机播放该列表
  • 使用结果计算出每个项目的原始索引(因为您知道每个原始项目在洗牌列表中的最终位置)

......但这是一项非常多的工作.除非你的集合真的太大而不能保留额外的副本(不要忘记它只是引用的副本,而不是整个对象),我只是在改组之前克隆集合.