如何以同样的顺序洗牌?

时间:2014-12-09 23:00:49

标签: java android arrays arraylist shuffle

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

我只是想要改变Bitmap,但String ArrayList的顺序应该相同。

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

我尝试了这个,但它以不同的顺序洗牌。

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

3 个答案:

答案 0 :(得分:4)

我在评论中说过,最好将字符串和位图放在一起,这样你就不需要维护并行列表了。基本上是这样的:

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<NamedBitmap> namedBitmaps,您可以使用以下内容添加内容:

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:1)

|| strlen($contents) > MAX_FILE_SIZE