Une carte est un carte, ou "tableau associatif". . Il a une disposition clé->valeur. Une liste est par contre un liste qui est une collection ordonnée d'éléments.
Une comparaison plus directe pourrait être faite entre Définir et Liste : Les deux contiennent des valeurs, où la liste est explicitement ordonnée (vous pouvez obtenir l'élément # x), et l'ensemble n'est (typiquement) pas ordonné (bien, à moins que ce soit une SortedSet (dans ce cas, l'ordre d'itération sera ordonné par un comparateur).
Les deux implémentations les plus courantes pour Set et List sont HashSet et ArrayList. . Pour vérifier si un élément appartient à une liste de tableaux (contains(element)), l'implémentation itère sur tous les éléments de celle-ci, en vérifiant si l'on a trouvé l'élément en utilisant la méthode equals(). Pour vérifier si un élément appartient à un hashset, on calcule d'abord le hashCode() de l'élément, puis on se rend "directement" à la position où cet élément devrait réside, et vérifie s'il s'y trouve.
Ainsi, une différence significative entre ArrayList et HashSet est la vitesse de contains() .
Sur une liste, vous pouvez demander l'élément# x, en plus de ce que vous pouvez faire sur un ensemble, c'est-à-dire ajouter, enlever, demander s'il est présent (contient), et itérer sur tous les éléments.
Sur une carte, vous pouvez demander un élément par sa clé, plutôt que par son index comme vous le faites avec une liste.
Un HashSet est actuellement implémenté simplement par un HashMap où la partie valeur de la relation clé->valeur n'est pas utilisée. C'est complètement absurde et cela ne sert à rien d'autre qu'à gaspiller au moins 4 octets, voire 12, pour tous les éléments insérés dans le HashSet.