1
votes

Existe-t-il une autre façon de choisir les 3 premiers nombres de cette ArrayList?

J'essaye de renvoyer les 3 premiers nombres de ce arrayList mais comme c'est le cas, j'ai tout le tableau.

    ArrayList<Integer> list = new ArrayList<Integer>();
    for (int i=0; i<10; i++) {
        list.add(new Integer(i));
    }
    Collections.shuffle(list);
    for (int i=0; i<3; i++) {
        System.out.println(list.get(i));

    }
    System.out.println(list);
    return list;

Là, j'ai vu quelques exemples utilisant pick () mais je ne Je ne comprends pas. Quelqu'un peut-il expliquer?


7 commentaires

Vous pouvez utiliser un ensemble de hachage


Votre code imprime en fait les trois premiers chiffres. Vous choisissez ensuite d'imprimer et de renvoyer la liste entière.


Avez-vous besoin des 3 premiers entiers uniques ou seulement des 3 premiers entiers?


@FailingCoder, System.out.println (list) imprime en fait la liste en utilisant l'implémentation dans AbstractCollection.toString () .


Vraiment? Je n'en savais rien. Je ne pense pas que ce soit la même chose avec java.util.ArrayList , non?


ArrayList étend cette classe à travers AbstractList .


Jetez un œil à ma réponse en une ligne, @Maluco.


3 Réponses :


4
votes

Utilisez une sous-liste, si vous ne voulez que ces trois premiers éléments.

return list.subList(0, 3);


2 commentaires

pour renvoyer les 3 premiers devrais-je utiliser: return list.subList (0, 2); ?


@Maluco, non. Le dernier index est non inclusif



3
votes

Tout d'abord, préférez une List (l'interface) à ArrayList (le type concret). Deuxièmement, vous pouvez générer la plage souhaitée avec un IntStream . Ensuite, mélangez-le, puis ne renvoyez que trois éléments avec un appel limit (long) . Comme,

List<Integer> list = IntStream.range(0, 10).boxed().collect(Collectors.toList());
Collections.shuffle(list);
return list.stream().limit(3).collect(Collectors.toList());


0 commentaires

1
votes

Une autre façon de le faire avec Java 8 serait de diffuser 3 nombres aléatoires de 0 à 10 et de les rassembler sous forme de liste, quelque chose comme:

 //Stream 3 unique numbers from 0 to 10 and collect them as a list
 List<Integer> listOfNumbers = new Random().ints(0, 11).distinct().limit(3).boxed().collect(Collectors.toList());
 System.out.println(listOfNumbers);  

Unique

 List<Integer> listOfNumbers = new Random().ints(3, 0, 11).boxed().collect(Collectors.toList());
 System.out.println(listOfNumbers); 


0 commentaires