Juste pour le fun, j'ai décidé d'écrire un peu de code que vous pouvez utiliser pour garantir un ordre aléatoire à chaque fois. Ceci est utile de sorte que vous pouvez attraper le cas où vous êtes en fonction sur le bon de commande, mais vous ne devriez pas être. Si vous voulez dépendent de l'ordre, que comme d'autres l'ont dit, vous devez utiliser un SortedMap. Si vous utilisez une Carte et d'arriver à s'appuyer sur le bon de commande, puis en utilisant les suivantes RandomIterator va rattraper ça. J'avais seulement l'utiliser dans le code de test, car il utilise plus de mémoire, ne pas le faire serait.
Vous pouvez aussi envelopper la Carte (ou le Jeu) pour avoir de retour de la RandomeIterator qui serait alors de vous permettre d'utiliser la boucle for-each.
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class Main
{
private Main()
{
}
public static void main(final String[] args)
{
final Map<String, String> items;
items = new HashMap<String, String>();
items.put("A", "1");
items.put("B", "2");
items.put("C", "3");
items.put("D", "4");
items.put("E", "5");
items.put("F", "6");
items.put("G", "7");
display(items.keySet().iterator());
System.out.println("---");
display(items.keySet().iterator());
System.out.println("---");
display(new RandomIterator<String>(items.keySet().iterator()));
System.out.println("---");
display(new RandomIterator<String>(items.keySet().iterator()));
System.out.println("---");
}
private static <T> void display(final Iterator<T> iterator)
{
while(iterator.hasNext())
{
final T item;
item = iterator.next();
System.out.println(item);
}
}
}
class RandomIterator<T>
implements Iterator<T>
{
private final Iterator<T> iterator;
public RandomIterator(final Iterator<T> i)
{
final List<T> items;
items = new ArrayList<T>();
while(i.hasNext())
{
final T item;
item = i.next();
items.add(item);
}
Collections.shuffle(items);
iterator = items.iterator();
}
public boolean hasNext()
{
return (iterator.hasNext());
}
public T next()
{
return (iterator.next());
}
public void remove()
{
iterator.remove();
}
}