"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > How to synchronously shuffle two associated ArrayList?

How to synchronously shuffle two associated ArrayList?

Posted on 2025-05-03
Browse:245

How to Shuffle Two Related ArrayLists While Maintaining Their Correspondence?

Preserving Relationships While Randomizing ArrayLists

When working with two related ArrayLists, it can be essential to maintain the relationship between their elements after randomization. This becomes particularly important when one ArrayList's order affects the other.

Consider the scenario described in the question, where we have two ArrayLists: fileList and imgList, each containing a corresponding file name and image name. Let's find out how we can randomize fileList while ensuring that imgList follows the same randomization pattern.

The Challenge

The challenge lies in ensuring that the order of the elements in imgList aligns with the shuffled order of fileList. Collections.shuffle() is commonly used for randomization, but it generates a new random arrangement of elements, making it difficult to preserve the original relationship.

The Solution: Synchronized Shuffling

To solve this problem, we can use Collections.shuffle() twice, each time with a Random object initialized with the same seed. The seed value guarantees that both Random objects produce the same sequence of random numbers.

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

By using the same seed for both Random objects, we ensure that fileList and imgList are shuffled in the same order. This maintains the relationship between the corresponding elements, allowing them to be used together without any discrepancies.

Example Output

After applying the solution, the resulting fileList might look like this:

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

Consequently, imgList will be automatically randomized to match the new order of fileList:

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

This ensures that the "e1.jpg" image still corresponds to "H1.txt" and so on, making it easy to work with the two ArrayLists in harmony despite the randomization.

Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3