1. ホーム

[解決済み】2つのArrayListを同じようにランダム化する方法は?

2022-04-15 21:43:30

質問

2つの配列リストがあります filelistimgList というように、互いに関連するもの、例えば "H1.txt" と "e1.jpg" が関連します。のリストを自動的にランダム化する方法。 imgList のランダム化に従って fileList ? エクセルのように、ある列をソートすると、他の列も自動的にそれに従うのでしょうか?

String [] file = {"H1.txt","H2.txt","H3.txt","M4.txt","M5.txt","M6.txt"};
ArrayList<String> fileList = new ArrayList<String>(Arrays.asList(file));

String [] img = {"e1.jpg","e2.jpg","e3.jpg","e4.jpg","e5.jpg","e6.jpg"};
ArrayList<String> imgList = new ArrayList<String>(Arrays.asList(img));

//randomized files
Collections.shuffle(fileList);

ランダム化後の出力 例:

fileList = {"M4.txt","M6.txt","H3.txt","M5.txt","H2.txt","H1.txt"};

意図した出力。

 imgList = {"e4.jpg","e6.jpg","e3.jpg","e5.jpg","e2.jpg","e1.jpg"};

解決方法は?

使用方法 Collections.shuffle() を2回、2つの Random オブジェクトを同じシードで初期化します。

long seed = System.nanoTime();
Collections.shuffle(fileList, new Random(seed));
Collections.shuffle(imgList, new Random(seed));

2つの Random オブジェクトが同じシードを持つ場合、両方のリストがまったく同じ方法でシャッフルされることが保証されます。 これにより、2つの別々のコレクションを作ることができます。