Un Set est une collection non ordonnée qui, contrairement à List, ne contient aucun doublon.
Le paramètre de type générique de l'interface Set désigne le type des éléments contenus dans l'ensemble :
Set<Integer> ints = Set.of(1, 2, 3);
Set<String> strings = Set.of("alpha", "beta", "gamma");
Set<Object> mixed = Set.of(1, false, "foo");
Note que la méthode Set.of() crée une instance de Set non modifiable.
Essayer d'appeler des méthodes comme add et remove sur cette instance provoquera une exception à l'exécution.
Pour créer un Set modifiable, il faut instancier une classe qui implémente l'interface Set.
La classe intégrée la plus utilisée qui implémente cette interface est la classe HashSet.
Set<Integer> ints = new HashSet<>();
L'interface Set hérite des interfaces Collection et Iterable, et partage donc de nombreuses méthodes avec d'autres types de collections.
Une différence notable avec l'interface Collection, cependant, est que des méthodes comme add et remove renvoient un boolean (au lieu de void), qui indique si l'élément était présent dans l'ensemble au moment de l'appel à cette méthode :
Set<Integer> set = new HashSet<>();
set.add(1);
// => true
set.add(2);
// => true
set.add(1);
// => false
set.size();
// => 2
set.contains(1);
// => true
set.contains(3);
// => false
set.remove(3);
// => false
set.remove(2);
// => true
set.size();
// => 1
Ta nostalgie des cartes Blorkemon™️ ne montre aucun signe de ralentissement : tu as même recommencé à les collectionner, et tu entraînes tes amis avec toi.
Dans cet exercice, tu vas utiliser l'interface Set pour t'aider à gérer ta collection, car les cartes en double n'ont pas d'importance quand ton objectif est d'obtenir toutes les cartes existantes.
Tu viens de retrouver ta vieille réserve de cartes Blorkemon™️ ! Cette réserve contient un tas de cartes en double, il est donc temps de commencer une nouvelle collection en supprimant les doublons.
Tu veux vraiment que tes amis rejoignent ta folie Blorkemon™️, et la meilleure façon de faire est de lancer leur collection en leur donnant une carte.
Implémente la méthode newCollection, qui transforme une liste de cartes en un Set représentant ta nouvelle collection.
GottaSnatchEmAll.newCollection(List.of("Newthree", "Newthree", "Newthree"));
// => {"Newthree"}
Une fois que tu as une collection, elle prend vie et doit grandir.
Implémente la méthode addCard, qui prend une nouvelle carte et ton ensemble actuel de cartes collectionnées.
La méthode doit ajouter la nouvelle carte à la collection si elle n'y est pas déjà présente, et doit renvoyer un boolean indiquant si la collection a été mise à jour.
Set<String> collection = GottaSnatchEmAll.newCollection("Newthree");
GottaSnatchEmAll.addCard("Scientuna",collection);
// => true
collection.contains("Scientuna");
// => true
Tu veux vraiment que tes amis rejoignent ta folie Blorkemon™️, alors il est temps de commencer à échanger !
Lorsque tu échanges avec des amis, tous les échanges ne valent pas la peine d'être faits, ou ne sont pas possibles. Tu ne dois échanger que si ton ami et toi possédez chacun une carte que l'autre n'a pas.
Implémente la méthode canTrade, qui prend ta collection actuelle et la collection d'un de tes amis.
Elle doit renvoyer un boolean indiquant si un échange est possible, en suivant les règles ci-dessus.
Set<String> myCollection = Set.of("Newthree");
Set<String> theirCollection = Set.of("Scientuna");
GottaSnatchEmAll.canTrade(myCollection, theirCollection);
// => true
Tes amis passionnés de Blorkemon™️ et toi vous réunissez et vous vous demandez quelles cartes sont les plus communes.
Implémente la méthode commonCards, qui prend une liste de collections et renvoie une collection des cartes que toutes les collections ont en commun.
GottaSnatchEmAll.commonCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Scientuna"}
Est-ce que tes amis et toi possédez collectivement toutes les cartes Blorkemon™️ ?
Implémente la méthode allCards, qui prend une liste de collections et renvoie une collection de toutes les cartes différentes présentes dans l'ensemble des collections réunies.
GottaSnatchEmAll.allCards(List.of(Set.of("Scientuna"), Set.of("Newthree","Scientuna")));
// => {"Newthree", "Scientuna"}
Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.