"Eh bien, comment va ton processeur ?"

"Ça va. Je me suis assis dans de l'azote liquide pendant une heure, alors maintenant je suis comme neuf !"

"Génial. Alors continuons."

"Collections d'ensembles."

Mathématiquement parlant, un ensemble est un groupe d'éléments uniques. Ainsi, en programmation, un Set est une collection d'éléments uniques, c'est-à-dire une collection qui ne permet pas de stocker des éléments identiques.

"Je ne sais pas si Ellie t'a montré la hiérarchie d'héritage de Set. Sinon, la voici :"

Implémentations des interfaces Set et Queue - 1

"Un HashSet est une collection qui stocke des éléments en interne à l'aide des valeurs de hachage renvoyées par la méthode hashCode ()."

"Pour plus de simplicité, HashSet<E> stocke un objet HashMap<E, Object> qui stocke les valeurs du HashSet sous forme de clés."

« Waouh ! »

"L'utilisation de codes de hachage vous permet de rechercher, d'ajouter et de supprimer rapidement des éléments de l'ensemble."

"Mais gardez à l'esprit que votre classe doit implémenter correctement les méthodes hashCode & equals afin d'ajouter des objets de vos classes à un Set, et de les y trouver correctement."

"Les deux méthodes sont beaucoup utilisées dans HashSet/HashMap. "

"Si vous oubliez d'implémenter la méthode hashCode (), alors vous risquez de ne pas retrouver votre objet dans le Set, même s'il est présent."

"Oui, je me souviens, je me souviens. Tu m'en as parlé plus tôt. J'en ai entendu parler."

"OK. Alors voici quelques informations plus utiles pour vous."

"Supposons que vous ayez correctement implémenté hashCode et equals  dans votre classe, et que vous stockiez avec plaisir vos objets dans un Set."

"Mais ensuite, vous allez changer l'un des objets, et ce faisant, vous modifiez les données internes utilisées pour calculer son hachage . Ainsi, le hachage de l'objet change."

"Et cela signifie que lorsque vous le chercherez dans l'Ensemble, vous ne le trouverez probablement pas."

« Waouh ! Comment ça marche ? »

"Il s'agit d'un écueil bien connu lorsque l'on travaille avec des hachages. Essentiellement, les recherches HashSet (et HashMap) ne sont garanties de fonctionner correctement que si les objets sont immuables ."

« Waouh ! Et quoi, personne n'y fait rien ? »

"Tout le monde prétend que le problème n'existe pas. Mais cela revient fréquemment dans les interviews, alors il vaut peut-être la peine de s'en souvenir…"

"Un LinkedHashSet est un HashSet dont les éléments sont également stockés dans une liste chaînée. Les HashSets normaux ne prennent pas en charge l'ordre des éléments. Premièrement, ce n'est tout simplement pas une opération officielle. Deuxièmement, même l'ordre interne peut changer de manière significative lorsqu'un seul l'élément est ajouté."

Mais vous pouvez obtenir un itérateur à partir d'un LinkedHashSet et l'utiliser pour parcourir tous les éléments dans l'ordre dans lequel ils ont été ajoutés au LinkedHashSet . Cela n'arrive pas souvent, mais parfois c'est vraiment nécessaire."

"Je vois. J'adore quand des cours existent pour ces scénarios "juste au cas où". De tels cas ne sont pas si rares."

" TreeSet est une collection qui stocke des éléments sous la forme d'un arbre ordonné par valeurs. Un TreeSet <E> contient un TreeMap <E, Object> qui stocke toutes ces valeurs. Et ce TreeMap utilise un arbre équilibré rouge - noir pour stocker elements . Par conséquent, il prend en charge les opérations d'ajout, de suppression et de contient très rapides.

"Oui, je me souviens. Nous en avons discuté récemment. Et j'ai aussi réfléchi à l'endroit où cela est utilisé."

"Et il s'avère que certaines des collections les plus populaires de Java l'utilisent."

"Ouais. Au fait, les enquêteurs posent souvent des questions sur TreeSet . Ils essaient généralement de vous tromper. Ils diront, 'si un TreeSet utilise un arbre binaire, alors tous les éléments peuvent former une longue branche, donc les recherches prendront du temps. «C'est juste le moment de remettre l'insolent à sa place en déclarant: "Même un enfant sait que TreeSet et TreeMap utilisent des arbres rouge -noir équilibrés , donc cette situation est en fait impossible.»"

"Ah. J'adorerais voir le visage de la personne qui a posé cette question. Je pourrais même mémoriser cette phrase. …"

"Mais en pratique, Set s'est avéré ne pas être aussi simple que je le pensais au départ."

"En revanche, la situation avec Queue est beaucoup plus simple :"

Implémentations des interfaces Set et Queue - 2

" La file d'attente implémente une file d'attente. Les éléments sont ajoutés à la fin de la file d'attente et pris au début."

" PriorityQueue est en fait la seule implémentation classique de l' interface Queue , sans compter LinkedList , qui techniquement est aussi une file d'attente."

"D'accord, je commence à être fatigué. C'est tout pour aujourd'hui. Jusqu'à la prochaine fois."