【问题标题】:How to shuffle in same order?如何以相同的顺序洗牌?
【发布时间】:2014-12-09 23:00:48
【问题描述】:

我有两个 ArrayList,一个是 Bitmap 类型,包含图片,另一个是 String,包含位图的文本。

我只是想打乱Bitmap,但是String ArrayList应该是相同的顺序。

private ArrayList<Bitmap> tmpBitmap = new ArrayList<Bitmap>();
private ArrayList<String> tmpName = new ArrayList<String>();

我试过这个,但它以不同的顺序随机播放。

Collections.shuffle(tmpWord);
Collections.shuffle(tmpName);

【问题讨论】:

  • 我认为您的意思是您希望两个并行列表具有相同的随机播放。您最好将相关项目放入对象中,而不是使用并行列表。
  • 你是什么意思?你能发布一个示例代码吗?
  • 理论上,您可以使用相同的种子创建两个 java.util.Random 实例,并在第一次 shuffle 时指定其中一个,在第二次 shuffle 时指定另一个。给定相同长度和相同序列的伪随机数,shuffle 将产生相同的排列。通过将字段组合到单个对象中来摆脱并行列表可能会产生更易于维护的代码。
  • 您可以使用第三个整数列表,它表示指向其他两个列表的索引点。你会洗牌这个列表,并使用你从这个列表中检索到的任何值作为其他两个的索引......

标签: java android arrays arraylist shuffle


【解决方案1】:

我在 cmets 中说过,最好将字符串和位图放到对象中,这样就不需要维护并行列表。基本上是这样的:

class NamedBitmap {
    String name;
    Bitmap bitmap;
    // use privacy modifiers and accessors according to your taste
    public NamedBitmap(String name, Bitmap bitmap) {
        this.name = name;
        this.bitmap = bitmap;
    }
}

List<NamedBitmap> namedBitmaps = new ArrayList<NamedBitmap>();

...

Collections.shuffle(namedBitmaps);

这样,名称总是与位图相关联;您不必保持两个列表以相同的顺序保持关联。

并行数组(或列表)是人们在结构和对象提供更好选择之前必须关联相关数据的方式。

编辑

给定如上所述的List&lt;NamedBitmap&gt; namedBitmaps,您可以使用以下方法向其中添加内容:

namedBitmaps.add(new NamedBitmap(givenName, givenBitmap));

您可以使用namedBitmaps.get(i).namenamedBitmaps.get(i).bitmap 访问名称和位图。

【讨论】:

  • 并行列表通常是一个警告信号,表明属于同一对象的两个或多个字段正在分别处理。它们也是程序维护期间的风险:某人,有一天可能会对一个列表做某事,而不是另一个。
  • 好的,我知道了,但是我应该在课堂上输入什么?我在 onDraw 中绘制位图,并从数组列表中读取它的文本。在数组中,我有位图 0-29 的文本列表。
  • @Unknown 查看我的编辑。如果这不是您想要的,那么您必须更具体地提出您的问题。
【解决方案2】:

将您的两个 ArrayLists 更改为 Map&lt;Bitmap,string&gt; 集合,然后当您随机播放时,您会按照预期进行随机播放,并且只需访问一个集合即可获取所需的所有信息。虽然这确实要求位图是唯一的

*感谢 kcoppock 注意到它是 Android / Java

【讨论】:

  • 没注意到 Android / Java 标签:P
  • 你仍然需要一个List 来洗牌;你通常不能洗牌Map
  • 你可以从MapentrySet()初始化一个List
【解决方案3】:
long seed = new Random().nextLong();
Collections.shuffle(tmpWord, new Random(seed));
Collections.shuffle(tmpName, new Random(seed));

【讨论】:

    猜你喜欢
    • 2012-11-12
    • 2021-06-22
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多